我有三个表,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();
}
}
}