2011-04-13 69 views
0

我有3个表格。基本上,我有这样的结构:LINQ中的简单查询

Customer 
-------- 
IDCustomer 
NameCustomer 

Product 
««««««« 
IDProduct 
NameProduct 

Order 
««««« 
IDCustomer 
IDProduct 

如何得到这样的结果,使用LINQ:

Result 
«««««« 
NameCustomer 
NameProduct 

提前感谢!

+0

一个测试你的LINQ查询加入会做 – Magnus 2011-04-13 14:13:03

回答

4

假设你没有在数据库中建立正确的关系(或者你有没有产生你的关系导航属性),你可以做到以下几点:

var result = from c in _context.Customer 
      join o in _context.Order on c.IDCustomer equals o.IDCustomer 
      join p in _context.Product on o.IDProduct equals p.IDProduct 
      select new { c.NameCustomer, p.NameProduct } 

这将是容易得多,但是,要将适当的外键添加到数据库并允许实体框架(或LINQ to SQL)为您生成导航属性。如果是这样的话,这将是那么容易,因为:

var result = _context.Order.Select(o => new 
    { 
     o.Customer.NameCustomer, 
     o.Product.NameProduct 
    }); 
2

LINQ的整体美感的是,这应该是所有自动为您完成自动生成的对象。

确保您的表关系在将它们移动到您的DBML文件之前在SQL Server中设置。在此之后,您的客户表将附有订单,其中您的产品将附加到您的订单中。

如从客户表(LINQ)中选择将给你一个客户列表,其中将有一个Order对象的IENumerable列表附加到每个客户列表。

0
from t1 in Product 
join t2 in Order on t1.IDProduct equals t2.IDProduct 
join t3 in Customer on t2.IDCustomer equals t3.IDCustomer 
select new { t1.NameProduct, t3.NameCustomer} 

可以使用linqpad.exe直接对数据库