我在表中有以下值,我需要一个满足以下条件的LINQ查询。
选择一条具有最大RevOrder的记录。 如果有多个记录具有相同的最大RevOrder,则选择具有最大RevDate的记录 如果RevDate也相等,则获取具有最大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]&#39 ;, 因为它没有已知的值到图层的映射。
答案 0 :(得分:2)
不要尝试使用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();
答案 1 :(得分:1)
你应该在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();