【问题标题】:Most efficient way to get MAX value of joined table in LINQ query using C#使用 C# 在 LINQ 查询中获取连接表的 MAX 值的最有效方法
【发布时间】:2011-11-11 21:49:50
【问题描述】:

我正在尝试找到最有效的方法来获取 LINQ 中连接表中的最新记录。

这个查询可能处理数千条记录,所以我不想执行子查询。

我需要 items 中的所有内容,但只需要“Notes”表中的最新日期,其字段名称为 SubmittedDate。

var items = (from t1 in db.Items
                         from t2
                            in db.Notes
                           .Where(o => (t1.Item_ID == o.Item_ID))
                         select new ItemModel
                         {
                             Name = t1.Name,
                             MostRecentUpdate = t2.SubmittedDate <== Need max value in model
                         });

任何帮助将不胜感激。

【问题讨论】:

    标签: c# linq linq-to-sql c#-4.0


    【解决方案1】:

    看起来你可能只是想加入一个群组:

    var items = from t1 in db.Items
                join t2 in db.Notes on t1.Item_ID equals t2.Item_ID into notes
                select new ItemModel
                {
                    Name = t1.Name,
                    MostRecentUpdate = notes.Max(x => (DateTime?) x.SubmittedDate)
                };
    

    如果匹配的Notes 行中没有非空日期,现在MostRecentUpdate 应该为空。至少,这就是 LINQ to Objects 的行为,所以手指交叉抽象保持...

    【讨论】:

    • 谢谢乔恩。如果在 notes 表中没有找到任何项目,这会返回 null 吗?
    • @Nick:我能做到——我没想到 :)
    • 感谢您的快速回复。你会介意的?我在学! :)
    • 这里不需要let 吗?换句话说,您的查询不是为每个项目重新发出Max 子查询吗?
    • @BrokenGlass:不,notes 是一个特定于当前t1 的组,因为它是一个组加入。每个t1 只有一个结果,每个t1 / t2 组合没有一个结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 2012-07-10
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多