只获得每个组的最高行

时间:2010-06-28 21:44:59

标签: c# linq

我有一些代码按“Value1”对表进行分组,还有一些循环将每个组的顶行添加到列表中。这是一个非常丑陋的方法,我想知道我是否可以在LINQ查询中用更多行替换其中一个foreach循环?问题是,我没有最模糊的想法如何做到这一点。

var Result = 
from a in DB.Table1
group new {Values = a} by a.Value1 into c
select new {everything = c};

foreach (var Row in Result)
{
    foreach (var RowAll in Row.Everything)
        {
        List.Add(new List<string>() {RowAll.Value1, RowAll.Value2})
        break;
    }
}

2 个答案:

答案 0 :(得分:1)

使用Enumerable.First

var List =
    (from Row in Result
     let RowAll = row.Everything.First()
     select new List<string>() {RowAll.Value1, RowAll.Value2}
    ).ToList();

或者,结合原始查询:

var List =
    (from a in DB.Table1
     group a by a.Value1 into c
     select new List<string>() {c.Key, c.First().Value2}
    ).ToList();

答案 1 :(得分:0)

使用FirstOrDefault:

var query = from row in result
           let rowAll = row.Everything.FirstOrDefault()
           where rowAll != null
           select new List<string> {rowAll.Value1, rowAll.Value2};

var list = query.ToList();

重读第一个查询我意识到你正在对'a'的属性进行分组,所以不应该有空分组。 First()应该像其他海报示例一样安全。

相关问题