C# 在LINQ查询中使用C获取联接表最大值的最有效方法#
我试图找到最有效的方法来获取LINQ中联接表中的最新记录 此查询可能处理数千条记录,因此我不想执行子查询 我需要从items开始的所有内容,但只需要“Notes”表中的最新日期,该表的字段名为SubmittedDateC# 在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(
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
组合都有一个结果。