【问题标题】:How to get rows by LINQ如何通过 LINQ 获取行
【发布时间】:2017-04-08 18:21:36
【问题描述】:

大家。

我有以下数据。

日期|第 1 列|第 2 列|值 -------------------------- 1 |A |D |100 -------------------------- 2 |A |D |200 -------------------------- 1 |B |D |150

我需要获取 DATE 确实具有最大值的行。就这样

日期|第 1 列|第 2 列|值 -------------------------- 2 |A |D |50 -------------------------- 1 |B |D |150

对不起,我的英语不好。

【问题讨论】:

标签: linq


【解决方案1】:

据我所知,您需要每组 column1 的最大日期 -

为此你可以选择

var custsLastAccess = from c in db.data //data is your table
                      group c by c.COLUMN1 into grp
                      select grp.OrderByDescending(c => c.DATE).FirstOrDefault();

【讨论】:

  • 不,因为我失去了与数据库中其他表的关联。
  • 好的!要进行这种数据获取,您必须逐个进行分组,如果您想加入其他数据表,您应该创建一个类并将数据转换为该类型。并将其用于其他用途。像加入其他表一样
【解决方案2】:

您可以先从 LINQ 中选择最大值,然后按此最大值进行选择:

var max = rows.Max(a => a.DATE);
var result = rows.Where(a => a.DATE == max).ToList();

更简单:

var result = rows.Where(a => a.DATE == rows.Max(b => b.DATE)).ToList();

优化器/编译器应该优化上面的查询。

表达式:

var result = from r in rows
       where r.DATE == rows.Max(a => a.DATE)
       select r;

【讨论】:

    【解决方案3】:

    我找到了解决办法。以下代码决定了我的任务。

        public override IQueryable<ENTITY> Get()
        {
            return base.Get().GroupBy(x => new { x.COLUMN1, x.COLUMN2 }, (key, group) => new
            {
                row = group.OrderByDescending(x => x.DATE).FirstOrDefault()
            }).Select(x => x.row);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多