如何优化这个linq查询?

时间:2010-12-07 20:10:17

标签: .net linq

我有这个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()
    };

这是三张桌子。我需要将这些类别与项目联系起来,但中间有一个表格(多对多)。有没有更好的查询?

2 个答案:

答案 0 :(得分: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()
    };

了解我如何移除连接语句,但使用itemCategories的{​​{1}}属性?

答案 1 :(得分:0)

您拥有的查询将创建一个对象列表,这些对象将引用查询(类别),这些查询将在访问时执行(如果它们完全存在)。

这可能会导致客户端和数据库服务器之间出现大量“喋喋不休”,以及在TDS流中重复发送标头数据的额外开销。

您可能需要考虑在此处执行连接并展平数据。它只需要一次查找,代价是复制左侧的数据(项目)。

当然,任何优化,关键是测试,测试,测试。