我有一个表“订单”,其中有一个外键“ProductID”。
我希望在网格中显示带有产品名称的订单,而不使用 LazyLoad 以获得更好的效果,但是如果使用 DataLoadOptions 则检索所有产品字段,其接缝类似于矫枉过正。
有没有办法在第一个查询中检索仅产品名称? 我可以在DBML中设置一些属性吗?
在此table中,Linq To SQL中的“外键值”是“可见的”,但不知道这意味着什么。
修改:更改了标题,因为我不确定没有解决方案。
无法相信没有人有同样的问题,这是一种非常常见的情况。
答案 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 答案有关,但更清楚(也许问题也更清楚了)