在Linq中选择不同的列名称

时间:2016-04-01 15:39:59

标签: c# linq

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

我的SQL等价物是:

Select distinct Level1Id, Level1Name
from levels

我目前所做的是:

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

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

4 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

尝试

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

答案 2 :(得分:1)

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
}

答案 3 :(得分:1)

你是如此接近,还有一步:

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

关键是:匿名类型使用结构比较,这就是GroupBy或任何其他答案可行的原因。