使用LINQ为每个元素仅获取最新的JOINed项

时间:2018-09-18 16:42:50

标签: c# linq

我有一个LINQ查询:

insert

好,因此每个Elements.Join(ElementStates, element => element.ElementID, elementState => elementState.ElementID, (element , elementState ) => new { element, elementState }) 都有一个与其关联的Element。但是,出于历史目的,每个元素可以有多个状态,并用ElementState列标记。在此查询中,我只想为每个DateModified返回最新的ElementState

使用LINQ是否有可能?

编辑:

感谢吉拉德·格林提供有用的答案。

我已将其转换为其他希望以后再看到此方法的人使用的方法语法:

Element

1 个答案:

答案 0 :(得分:2)

您可以使用GroupJoin代替Join,然后按DateModified对组进行排序后检索第一条记录:

var result = from e in Elements
             join es in ElementStates on e.ElementID equals es.ElementID into esj
             select new {
                 Element = e,
                 State = esj.OrderByDescending(i => i.DateModified).FirstOrDefault()
             };

同样可以使用方法语法而不是查询语法来实现,但在我看来,这更具可读性

关于简单加入和组加入之间的区别:Linq to Entities join vs groupjoin