我有一个LINQ查询:
insert
好,因此每个Elements.Join(ElementStates,
element => element.ElementID,
elementState => elementState.ElementID,
(element , elementState ) => new { element, elementState })
都有一个与其关联的Element
。但是,出于历史目的,每个元素可以有多个状态,并用ElementState
列标记。在此查询中,我只想为每个DateModified
返回最新的ElementState
。
使用LINQ是否有可能?
编辑:
感谢吉拉德·格林提供有用的答案。
我已将其转换为其他希望以后再看到此方法的人使用的方法语法:
Element
答案 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