[代码]有链接表的LINQ查询(LINQ to SQL)

数据结构
还是先看图再说事吧!下面截图就是这个示例代码中使用到的3个数据表结构和各自的关系。

这三个表的基本作用是这样的:Products数据表用来存储产品数据,Customers数据表用来存储客户数据,而CustomersProducts数据表则是用来存储客户订购的产品信息。

代码说明
通过使用LINQ to SQL查询指定编号的客户订购的所有的产品数据,并且将其打印到控制台上。示例代码中查询的客户编号是ALFKI。

关键代码
DatabaseDataContext db = new DatabaseDataContext(); db.Log = Console.Out; var CustomerProducts = from ProductObject in db.Products from CustomerObject in db.Customers from CPObject in db.CustomersProducts where ProductObject.ProductID == CPObject.ProductID && CustomerObject.CustomerID == CPObject.CustomerID && CustomerObject.CustomerID == "ALFKI" select new { ProductObject, CustomerID = CustomerObject.CustomerID, CustomerName = CustomerObject.ContactName}; foreach (var ProductObject in CustomerProducts) { Console.WriteLine("---------------------"); Console.WriteLine("CustomerID={0}", ProductObject.CustomerID); Console.WriteLine("CustomerName={0}", ProductObject.CustomerName); Console.WriteLine("ProductName={0}", ProductObject.ProductObject.ProductName); }

LINQ to SQL生成了类似如下的SQL命令:
SELECT [t0].[ProductID], [t0].[ProductName], [t0].[UnitPrice], [t0].[UnitsInStock], [t0].[UnitsOnOrder], [t1].[CustomerID], [t1].[ContactName] AS [CustomerName] FROM [dbo].[Products] AS [t0], [dbo].[Customers] AS [t1], [dbo].[CustomersProducts] AS [t2] WHERE ([t0].[ProductID] = [t2].[ProductID]) AND ([t1].[CustomerID] = [t2].[CustomerID]) AND ([t1].[CustomerID] = @p0) -- @p0: Input NVarChar (Size = 5; Prec = 0; Scale = 0) [ALFKI] -- Context: SqlProvider(Sql2005) -- Model: AttributedMetaModel Build: 3.5.30729.1
完整代码下载地址:http://u.115.com/file/f21c3fc56其中已经包含了测试所需的数据库。