0
点赞
收藏
分享

微信扫一扫

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


数据结构

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

[代码]有链接表的LINQ查询(LINQ to SQL)_数据结构


这三个表的基本作用是这样的: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其中已经包含了测试所需的数据库。

举报

相关推荐

0 条评论