【发布时间】:2020-02-23 04:56:46
【问题描述】:
我有一个这样的 Linq 查询
var results= StudentsList.GroupBy(x=> x.GroupID)
.GroupBy(x=> x.Any(g=>g.IsQualified== true))
.Select(g=> g)
.ToList();
我想将x.Any(g=>g.IsQualified== true) 部分存储到一个变量中,以便我可以根据我的要求即时更改它(例如:x.Any(g=>g.StudentName== "John")),而无需单独定义新的 Linq 查询。这可能吗?
伪代码
static void SomeFunction(Func<int, int> op)
{
var results= StudentsList.GroupBy(x=> x.GroupID)
.GroupBy(x=> op))
.Select(g=> g)
.ToList();
}
并称它为:
SomeFunction(x => x.Any(g=>g.IsQualified== true));
SomeFunction(x => x.Any(g=>g.StudentName== "John"));
SomeFunction(x => x.Any(g=>g.Country== "USA"));
【问题讨论】:
-
你想要一个
Func<IGrouping<int, Student>, bool>,我假设GroupID是int,StudentList是Student对象的集合,你总是想要第二个分组在bool值上。并像GroupBy(op)一样使用它。想想如果它总是x => x.Any(...),你可能想传入Any的谓词。 -
看一下 GroupBy 函数的方法签名,只要让你的 SomeFunction 取到准确的时间。如果您使用的是 IQueryable,则为
Expression<Func<TSource,TKey>>;如果您使用的是 IEnumerable,则为Func<TSource,TKey>。
标签: c# linq group-by delegates