【问题标题】:LINQ query to get record with maximum valuesLINQ 查询以获取具有最大值的记录
【发布时间】:2014-03-14 12:23:47
【问题描述】:

我在一个表中有以下值,我需要一个满足以下条件的 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__AnonymousType523[System.Nullable1[System.Double],System.Nullable`1[System.DateTime],System.Int32]', 因为它没有到值层的已知映射。

【问题讨论】:

  • 这是一个实体框架错误。你怎么用DocRevIDs;

标签: c# linq


【解决方案1】:

不要尝试使用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();

【讨论】:

    【解决方案2】:

    您应该对 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多