hhy6711 2019-11-25 16:46 采纳率: 50%
浏览 1493

C# DataTable lambda表达式 三表关联查询问题

我有三个表,Sales,Customer,Order,其中Sales表包含SalesID,Customer中包含SalesID和CustomerID,Order中包含CustomerID和OrderID。
问题:使用lambda表达式,通过SalesID查出Order中所有与Sales ID相关的OrderID。

自己搞定了。

using System.Linq;
using System.Data;
using System;

namespace ThreeTables
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建Sales DataTable
            DataTable salesDataTable = new DataTable();
            salesDataTable.Columns.Add("SalesID", typeof(string));
            salesDataTable.Rows.Add("01");
            salesDataTable.Rows.Add("02");
            //创建Customer DataTable
            DataTable customerDataTable = new DataTable();
            customerDataTable.Columns.Add("SalesID", typeof(string));
            customerDataTable.Columns.Add("CustomerID", typeof(string));
            customerDataTable.Rows.Add("01", "0101");
            customerDataTable.Rows.Add("01", "0102");
            customerDataTable.Rows.Add("02", "0201");
            customerDataTable.Rows.Add("02", "0202");
            //创建Orders DataTable
            DataTable orderDataTable = new DataTable();
            orderDataTable.Columns.Add("CustomerID", typeof(string));
            orderDataTable.Columns.Add("OrderID", typeof(string));
            orderDataTable.Rows.Add("0101", "010101");
            orderDataTable.Rows.Add("0101", "010102");
            orderDataTable.Rows.Add("0201", "020101");
            orderDataTable.Rows.Add("0201", "020102");
            orderDataTable.Rows.Add("0202", "020201");
            //根据salesID关联三表查出与SalesID相关的所有订单
            string orderid = Console.ReadLine();
            var result = salesDataTable.AsEnumerable().Where(x => x["SalesID"].ToString() == orderid)
                .Join(customerDataTable.AsEnumerable(), a => a["SalesID"].ToString(), b => b["SalesID"].ToString()
                , (a, b) => new
                {
                    SalesID = a.Field<string>("SalesID"),
                    CustomerID = b.Field<string>("CustomerID")
                })
                .Join(orderDataTable.AsEnumerable(), c => c.CustomerID, d => d["CustomerID"].ToString()
                , (c, d) => new
                {
                    SalesID = c.SalesID,
                    CustomerID = c.CustomerID,
                    OrderID = d.Field<string>("OrderID").ToString()
                }).ToList();
            foreach(var s in result)
            {
                Console.WriteLine(s.SalesID + "  " + s.CustomerID + "  " + s.OrderID);
            }
            Console.Read();

        }
    }

}

  • 写回答

1条回答 默认 最新

  • 沫林 2020-07-21 10:25
    关注

    这种写法还有linq的写法,三张表里只要有一张表没有匹配到,那查询出来的数据就是空的,恼火。

    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图