【问题标题】:Select distinct column names in Linq在 Linq 中选择不同的列名
【发布时间】:2016-04-01 15:39:59
【问题描述】:

我的表包含几列,我需要使用 Linq 在两个特定列中选择不同的行。

我的 SQL 等效项是:

Select distinct Level1Id, Level1Name
from levels

我目前做的是:

db.levels.GroupBy(c=> c.Level1Id).Select(s => s.First())

这将检索整行,不仅是 Level1Id 和 Level1Name。如何指定要在此 linq 查询中检索的列?

【问题讨论】:

  • 现在,对于下面的答案,我想使用变量 c 还是 l :)

标签: c# linq


【解决方案1】:

使用 Select,您可以指定匿名对象中的列,然后对其使用 Distinct:

  db.levels.Select(l => new{ l.Level1Id, l.Level1Name }).Distinct();

【讨论】:

    【解决方案2】:

    试试

    db.levels.Select(c => new {c.Level1Id, c.Level1Name}).Distinct();

    【讨论】:

      【解决方案3】:

      在您的LINQ 查询选择中指定两列,使用Level1IdLevel1Name 属性创建一个匿名对象:

      var query = (from v in db.levels
                  select new { Level1Id = v.Level1Id, Level1Name = v.Level1Name }).Distinct();
      

      并像这样使用每个项目:

      foreach (var r in query){
        int valId = r.LevelId;
        int level = r.Level1Name;
        //do something
      }
      

      【讨论】:

        【解决方案4】:

        离你这么近,再走一步:

        var result = db.levels.GroupBy(c=> new { c.Level1Id, c.Level1Name })
                       .Select(s => s.First())
        

        关键是:匿名类型使用结构比较,这就是为什么GroupBy 或任何其他答案都有效。

        【讨论】:

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