使用C#在LINQ查询中获取连接表的MAX值的最有效方法

时间:2011-11-11 13:43:49

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

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

此查询可能会处理数千条记录,因此我不想执行子查询。

我需要来自项目的所有内容,但只需要“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
                         });

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:5)

看起来你可能只想要一个小组加入:

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)
            };

如果匹配的MostRecentUpdate行中没有非空日期,则Notes应为null。至少,这就是LINQ to Objects的行为,所以手指越过了抽象......