.net 如何优化此linq查询?

.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

我有一个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.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及其查询计划吗?