我的表包含多个列,我需要使用Linq在两个特定列中选择不同的行。
我的SQL等价物是:
Select distinct Level1Id, Level1Name
from levels
我目前所做的是:
db.levels.GroupBy(c=> c.Level1Id).Select(s => s.First())
这将检索不仅Level1Id和Level1Name的整行。如何在此linq查询中指定要检索的列?
答案 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
查询选择中指定两列,创建一个具有Level1Id
和Level1Name
属性的匿名对象:
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
或任何其他答案可行的原因。