如何优化这个 linq 查询?
Posted
技术标签:
【中文标题】如何优化这个 linq 查询?【英文标题】:How to optimize this linq query? 【发布时间】:2010-12-07 20:10:17 【问题描述】:我有这个 linq to 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.itemCategories
on cats.categoryId equals ic.categoryId
where ic.itemId == i.itemId
select cats).ToList()
;
这是三张桌子。我需要将类别与项目连接起来,但中间有一个表(多对多)。有没有更好的方法来做这个查询?
【问题讨论】:
你检查过生成的sql和他们的查询计划吗? 【参考方案1】:这会产生相同的结果,但更容易阅读:
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
的 itemCategories
属性?
【讨论】:
【参考方案2】:您拥有的查询将创建一个对象列表,这些对象将引用查询(类别),然后在访问它们时执行(如果有的话)。
这可能会导致客户端和数据库服务器之间出现大量“喋喋不休”,以及通过 TDS 流重复发送标头数据的额外开销。
您可能需要考虑在此处执行联接并展平数据。它只需要一次查找,代价是复制左侧(项目)的数据。
当然,任何优化,关键是测试,测试,测试。
【讨论】:
以上是关于如何优化这个 linq 查询?的主要内容,如果未能解决你的问题,请参考以下文章