LINQ查询以获取具有最大值的记录

时间:2014-03-14 02:47:12

标签: c# linq

我在表中有以下值,我需要一个满足以下条件的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 ;,   因为它没有已知的值到图层的映射。

2 个答案:

答案 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();