Dynamic Linq select 在 GroupBy 之后分组第一
Dynamic Linq select first in groups after GroupBy
我想我已经阅读了所有 post 关于这个主题的文章,但似乎仍然无法让它发挥作用。
我想用动态 Linq 复制以下 GroupBy。我试过这个 Dynamic GroupBy 但似乎无法获得 First()。
var result = mydata
.GroupBy(g => g.ID)
.Select(z => z.First())
.Select("new (ID, Field1, Field2)");
GroupBy 需要是动态的。我需要分组字段的第一行。
所以..
ID:1, Field1:W, Field2:L
ID:1, Field1:A, Field2:B
ID:2, Field1:A, Field2:B
ID:2, Field1:C, Field2:D
最终应该是:
ID:1, Field1:W, Field2:L
ID:2, Field1:A, Field2:B
OR
ID:1, Field1:A, Field2:B
ID:2, Field1:C, Field2:D
这个呢
var mydata = new[] {
new { ID = 1, Field1 = "W", Field2 = "L"},
new { ID = 1, Field1 = "A", Field2 = "B"},
new { ID = 2, Field1 = "A", Field2 = "B"},
new { ID = 2, Field1 = "C", Field2 = "D"}
}.ToList();
var result = mydata.GroupBy(x => x.ID)
.Select(x => x.ToList()).ToList();
var output = result[0][0];
var output1 = result[0];
var output2 = result[1];
我通过添加到 DynamicQueryable
解决了这个问题
public static object First(this IQueryable source)
{
if (source == null) throw new ArgumentNullException("source");
return source.Provider.Execute(
Expression.Call(
typeof(Queryable), "First",
new Type[] { source.ElementType },
source.Expression));
}
以上不是必需的..但为了一致性还是添加了。
并添加到 IEnumerableSignatures
void First()
查询变为:
var result = mydata
.GroupBy("ID", "it")
.Select("it.First()")
.Select("new (ID, Field1, Field2)");
我想我已经阅读了所有 post 关于这个主题的文章,但似乎仍然无法让它发挥作用。 我想用动态 Linq 复制以下 GroupBy。我试过这个 Dynamic GroupBy 但似乎无法获得 First()。
var result = mydata
.GroupBy(g => g.ID)
.Select(z => z.First())
.Select("new (ID, Field1, Field2)");
GroupBy 需要是动态的。我需要分组字段的第一行。 所以..
ID:1, Field1:W, Field2:L
ID:1, Field1:A, Field2:B
ID:2, Field1:A, Field2:B
ID:2, Field1:C, Field2:D
最终应该是:
ID:1, Field1:W, Field2:L
ID:2, Field1:A, Field2:B
OR
ID:1, Field1:A, Field2:B
ID:2, Field1:C, Field2:D
这个呢
var mydata = new[] {
new { ID = 1, Field1 = "W", Field2 = "L"},
new { ID = 1, Field1 = "A", Field2 = "B"},
new { ID = 2, Field1 = "A", Field2 = "B"},
new { ID = 2, Field1 = "C", Field2 = "D"}
}.ToList();
var result = mydata.GroupBy(x => x.ID)
.Select(x => x.ToList()).ToList();
var output = result[0][0];
var output1 = result[0];
var output2 = result[1];
我通过添加到 DynamicQueryable
解决了这个问题public static object First(this IQueryable source)
{
if (source == null) throw new ArgumentNullException("source");
return source.Provider.Execute(
Expression.Call(
typeof(Queryable), "First",
new Type[] { source.ElementType },
source.Expression));
}
以上不是必需的..但为了一致性还是添加了。
并添加到 IEnumerableSignatures
void First()
查询变为:
var result = mydata
.GroupBy("ID", "it")
.Select("it.First()")
.Select("new (ID, Field1, Field2)");