关于.net:Linq转至SQL:我能否只渴望在联接表中加载一个字段?

关于.net:Linq转至SQL:我能否只渴望在联接表中加载一个字段?

Linq To SQL: Can I eager load only one field in a joined table?

我有一个表" orders",其前键为" ProductID"。

我想在带有产品名称的网格中显示订单,不使用LazyLoad以获得更好的性能,但是如果使用DataLoadOptions,它将检索所有Product字段,这看起来像是一个大材小用。

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

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

编辑:更改标题,因为我不太确定那里没有解决方案。
不能相信没有人会遇到同样的问题,这是一种非常普遍的情况。


您要的是linq-to-sql不提供的优化级别。 我认为您最好的选择是创建一个查询,该查询将返回您想要的数据,可能是匿名类型:

1
2
3
4
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 };

我在另一个问题中得到了解决方案,哪个.net ORM可以处理这种情况,该问题与liammclennan答案有关,但更明确了(也许问题也更明确了)


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

1
2
var q = FROM p IN dataContext.products SELECT p.ProductName;
var results = q.ToList();

您将返回存储在结果中的产品名称的列表,并且在服务器上执行查询时,只会带回ProductName列。


推荐阅读