如何优化这个linq查询?
问题描述:
我有这样的LINQ to SQL查询:如何优化这个linq查询?
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()
};
看我怎么删除的连接语句,但使用的item
的itemCategories
财产?
答
您拥有的查询将创建一个对象列表,这些对象将引用查询(类别),然后在访问它们时执行它们(如果它们完全相同)。
这可能会导致客户端和数据库服务器之间产生大量“喋喋不休”,以及在您的TDS流中重复发送标题数据的额外开销。
您可能想要考虑在这里执行连接并展开数据。这只需要一次查找,代价是复制左侧的数据(项目)。
当然,任何优化,关键是要测试,测试,测试。
您是否检查过生成的sql及其查询计划? – 2010-12-07 20:18:39