Linq To SQL:我是否只能在连接表中加载一个字段?

时间:2008-08-26 21:55:09

标签: .net sql performance linq-to-sql

我有一个表“订单”,其中有一个外键“ProductID”。

我希望在网格中显示带有产品名称的订单,而不使用 LazyLoad 以获得更好的效果,但是如果使用 DataLoadOptions 则检索所有产品字段,其接缝类似于矫枉过正

有没有办法在第一个查询中检索产品名称? 我可以在DBML中设置一些属性吗?

在此table中,Linq To SQL中的“外键值”是“可见的”,但不知道这意味着什么。

修改:更改了标题,因为我不确定没有解决方案。
无法相信没有人有同样的问题,这是一种非常常见的情况。

3 个答案:

答案 0 :(得分:5)

你要求的是linq-to-sql没有提供的优化级别。我认为最好的办法是创建一个可以返回所需数据的查询,可能是匿名类型:

from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };

答案 1 :(得分:0)

如果在linq查询中仅选择所需的列,然后在查询上调用.ToList(),它将立即执行,并且只会返回您感兴趣的列。例如,如果您这样做这样:

var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();

您将获得存储在结果中的产品名称列表,当查询在服务器上执行时,它将仅返回ProductName列。

答案 2 :(得分:0)

我在另一个问题Which .net ORM can deal with this scenario中得到解决方案,这与 liammclennan 答案有关,但更清楚(也许问题也更清楚了)