Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅从每组中获取最上面一行_C#_Linq - Fatal编程技术网

C# 仅从每组中获取最上面一行

C# 仅从每组中获取最上面一行,c#,linq,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) { fore

我有一些按“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;
    }
}
var结果=
从DB.Table1中的a
将新的{Values=a}按a.Value1分组到c中
选择new{everything=c};
foreach(结果中的var行)
{
foreach(var RowAll in Row.Everything)
{
添加(新列表(){RowAll.Value1,RowAll.Value2})
打破
}
}
使用:

var列表=
(从结果中的第行开始)
让RowAll=row.Everything.First()
选择新列表(){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();
var列表=
(来自DB.1中的a)
a组按a.Value1分为c组
选择新列表(){c.Key,c.First().Value2}
).ToList();
使用:

var列表=
(从结果中的第行开始)
让RowAll=row.Everything.First()
选择新列表(){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();
var列表=
(来自DB.1中的a)
a组按a.Value1分为c组
选择新列表(){c.Key,c.First().Value2}
).ToList();
使用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();
var query=来自结果中的行
让rowAll=row.Everything.FirstOrDefault()
罗威尔在哪里!=无效的
选择新列表{rowAll.Value1,rowAll.Value2};
var list=query.ToList();
重读您的第一个查询时,我意识到您是在“a”属性上分组的,所以不应该有空分组。First()应该和其他海报示例一样安全。

使用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();
var query=来自结果中的行
让rowAll=row.Everything.FirstOrDefault()
罗威尔在哪里!=无效的
选择新列表{rowAll.Value1,rowAll.Value2};
var list=query.ToList();
重读您的第一个查询时,我意识到您是在“a”属性上分组的,所以不应该有空分组。First()应该和其他示例一样安全