.net 如何优化此linq查询?
我有一个linq到sql查询:.net 如何优化此linq查询?,.net,linq,.net,Linq,我有一个linq到sql查询: var items = from i in context.Items orderby i.itemId descending select new ItemWithCategories { item = i, categories = ( from cats in context.categories join ic in context.itemC
var items =
from i in context.Items
orderby i.itemId descending
select new ItemWithCategories
{
item = i,
categories = (
from cats in context.categories
join ic in context.itemCategories
on cats.categoryId equals ic.categoryId
where ic.itemId == i.itemId
select cats).ToList()
};
有三张桌子。我需要将类别与项目连接起来,但是在它们之间有一个表(多对多)。是否有更好的方法执行此查询?这会产生相同的结果,但更易于阅读:
var items =
from item in context.Items
orderby item.itemId descending
select new ItemWithCategories
{
item = item,
categories = (
from itemCategory in item.itemCategories
select itemCategory.category).ToList()
};
查看我是如何删除join语句的,但使用
item
的itemcegories
属性?您的查询将创建一个对象列表,其中包含对查询(类别)的引用,然后在访问这些查询时执行这些查询(如果有的话)
这可能会导致客户机和数据库服务器之间的大量“聊天”,以及通过TDS流重复发送头数据的额外开销
您可能想考虑在这里执行一个连接并将数据变平。它只需要一次查找,代价是复制左侧的数据(项)
当然,对于任何优化,关键是测试、测试、测试。您检查过生成的sql及其查询计划吗?