LINQ查询获取最大值记录
本文关键字:记录 最大值 获取 查询 LINQ | 更新日期: 2023-09-27 17:50:15
我在一个表中有以下值,我需要一个满足以下条件的LINQ查询。
选择具有最大RevOrder的单个记录。如果有多个记录具有相同的最大RevOrder,则选择具有最大RevDate的记录如果RevDate's也相等,则获取最大RevisionStatusID的记录。
RevisionStatusID RevDate RevOrder
1 12/01/2012 0
2 14/02/2013 1
3 10/02/2013 2
4 11/01/2013 2
5 11/01/2013 3
我尝试了下面的查询,但它给出了一个错误。
var DocRevIDs = (from tbh in context.tblDocumentHeaders
join tbr in context.tblDocumentRevisions
on tbh.DocumentHeaderID equals tbr.DocumentHeaderID
where tbh.DocumentHeaderID == tb.DocumentHeaderID
select tbr).Max(o => new { o.RevOrder,o.RevisionDate,o.DocumentRevisionID });
无法处理该类型'<>f__AnonymousType52
3[System.Nullable
1[System.Double],System.Nullable ' 1[System.DateTime],System.Int32]',因为它没有已知的映射到值层。
不要尝试使用Max()
,而是使用orderby
子句的组合,然后使用FirstOrDefault()
。这将是您通过直接SQL所采取的方法。
就会得到类似的结果:
var docRevision = (from tbh in context.tblDocumentHeaders
join tbr in context.tblDocumentRevisions
on tbh.DocumentHeaderID equals tbr.DocumentHeaderID
where tbh.DocumentHeaderID == tb.DocumentHeaderID
orderby tbr.RevOrder descending, tbr.RevisionDate descending, tbr.DocumentRevisionID descending
select tbr).FirstOrDefault();
你应该排序linq:
中的记录var DocRevIDs = (from tbh in context.tblDocumentHeaders
join tbr in context.tblDocumentRevisions
on tbh.DocumentHeaderID equals tbr.DocumentHeaderID
where tbh.DocumentHeaderID == tbr.DocumentHeaderID
orderby tbr.RevOrder descending, tbr.RevDate descending, tbr.RevisionStatusID descending
select tbr).First();