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

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 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误