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

Nic*_*ick 1 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
                         });
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

Jon*_*eet 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)
            };
Run Code Online (Sandbox Code Playgroud)

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