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

C# 在LINQ查询中使用C获取联接表最大值的最有效方法#,c#,linq,linq-to-sql,c#-4.0,C#,Linq,Linq To Sql,C# 4.0,我试图找到最有效的方法来获取LINQ中联接表中的最新记录 此查询可能处理数千条记录,因此我不想执行子查询 我需要从items开始的所有内容,但只需要“Notes”表中的最新日期,该表的字段名为SubmittedDate var items = (from t1 in db.Items from t2 in db.Notes .Where(

我试图找到最有效的方法来获取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
                         });
var items=(从t1到db.items)
从t2开始
在db.Notes中
.其中(o=>(t1.Item\u ID==o.Item\u ID))
选择新项目模型
{
Name=t1.Name,

MostRecentUpdate=t2.SubmittedDate看起来您可能只想加入一个组:

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到对象的行为,因此祈祷抽象保持…

看起来您可能只想加入一个组:

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
行中没有非空日期,则应该为空。至少,这就是LINQ到对象的行为,所以祈祷抽象保持…

谢谢Jon。如果在Notes表中找不到任何项,这会返回空值吗?@Nick:我可以这样做-我没有应该是:)谢谢你的快速回复。你介意吗?我正在学习!:)你不需要一个
在这里吗?换句话说,你的查询不是为每个项目发出
Max
子查询吗?@BrokenGlass:no,
notes
是一个特定于当前
t1
的组,因为它是一个组连接。每个
t1只有一个结果,不是每个
t1
/
t2
组合都有一个。谢谢Jon。如果在notes表中找不到任何项目,这个会返回空值吗?@Nick:我可以这样做-我没有想到:)谢谢你的快速响应。你介意吗?我正在学习!:)你不需要
let
吗?换句话说,你的查询不是在发出吗ode>Max
每个项目的子查询?@BrokenGlass:no,
notes
是一个特定于当前
t1
的组,因为它是一个组联接。每个
t1
只有一个结果,而不是每个
t1
/t2
组合都有一个结果。