【问题标题】:LINQ join with top 1 from another tableLINQ 与另一个表中的前 1 连接
【发布时间】:2013-11-18 03:51:58
【问题描述】:

所以场景是我有一个项目表,每个项目在另一个表中有许多 cmets。我想获取带有 LATEST 评论的项目列表。

我这样做了:

var res = (from i in db.Item 
           select new
           { 
             ID = i.ID, 
             Name = i.Name,
             Comment = (from c in db.Comment
                        orderby c.Created descending
                        where c.Item == i.ID
                        select new { Message = c.Message }).FirstOrDefault().Message
            });

好的,这让我得到了我想要的结果,但它太慢了......请帮我加入这个!

谢谢!

【问题讨论】:

  • 为什么加入更快?您是否分析了生成的 SQL 并尝试了那里的差异?这是哪种 LINQ 风格?

标签: c# linq join


【解决方案1】:

试试这个:

var res = db.Item.Join(db.Comment, x=>x.ID, x=>x.ID, (x,y)=>new{x,y})
            .OrderByDescending(a=>a.y.Created)
            .GroupBy(a=>a.x.ID,(key,items)=>items.First())
            .Select(a=> new {
                       a.x.ID,
                       a.x.Name,
                       a.y.Message
                   });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    相关资源
    最近更新 更多