Linq To SQL:我是否可以渴望只在联接表中加载一个字段?
时间:2020-03-05 18:43:32 来源:igfitidea点击:
我有一个表" orders",其前键为" ProductID"。
我想在带有产品名称的网格中显示订单,不使用LazyLoad以获得更好的性能,但是如果使用DataLoadOptions,它将检索所有Product字段,这看起来像是一个大材小用。
有没有办法在第一个查询中仅检索产品名称?
我可以在DBML中设置一些属性吗?
在该表中说" Linq To SQL"中的"外键值"是"可见的",但不知道这意味着什么。
编辑:更改标题,因为我不太确定那里没有解决方案。
不能相信没有人会遇到同样的问题,这是一种非常普遍的情况。
解决方案
回答
如果仅在linq查询中选择所需的列,然后在查询上调用.ToList(),它将立即执行,并且只会带回我们感兴趣的列。例如,如果执行以下操作:
var q = from p in dataContext.products select p.ProductName; var results = q.ToList();
我们将返回存储在结果中的产品名称的列表,并且在服务器上执行查询时,只会带回ProductName列。
回答
我们要的是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 };
回答
我在另一个问题中得到了解决方案,哪个.net ORM可以处理这种情况,该问题与liammclennan答案有关,但更明确了(也许问题也更明确了)