C# 如何将谓词传递给linq表达式
给定一个这样的方法签名C# 如何将谓词传递给linq表达式,c#,linq,predicate,C#,Linq,Predicate,给定一个这样的方法签名 IEnumerable<Student> get(Func<DataRow, bool> predicate); IEnumerable get(Func谓词); 如何将谓词参数传递给linq表达式 public override IEnumerable<Student> get(Func<System.Data.DataRow, bool> predicate = null) { var students =
IEnumerable<Student> get(Func<DataRow, bool> predicate);
IEnumerable get(Func谓词);
如何将谓词参数传递给linq表达式
public override IEnumerable<Student> get(Func<System.Data.DataRow, bool> predicate = null) {
var students = from student in _dataSet.Tables[0].AsEnumerable()
join attendance in _dataSet.Tables[1].AsEnumerable()
on student.Field<int>("id") equals attendance.Field<int>("idStudent")
join grade in _dataSet.Tables[2].AsEnumerable()
on student.Field<int>("id") equals grade.Field<int>("idStudent")
join assignment in _dataSet.Tables[3].AsEnumerable()
on student.Field<int>("id") equals assignment.Field<int>("idStudent")
// where predicate??
// select blahblahblah
// return statement
}
public重写IEnumerable get(Func谓词=null){
var students=来自_dataSet.Tables[0]中的student.AsEnumerable()
在_dataSet.Tables[1].AsEnumerable()中加入考勤
on student.Field(“id”)等于attention.Field(“idStudent”)
在_dataSet.Tables[2].AsEnumerable()中联接等级
on student.Field(“id”)等于grade.Field(“idStudent”)
_dataSet.Tables[3].AsEnumerable()中的联接赋值
on student.Field(“id”)等于assignment.Field(“idStudent”)
//谓词在哪里??
//选择blahblahblah
//返回语句
}
因为谓词
是一个将数据行
作为输入的函数——就像where谓词(student)
一样使用它
我想你想要:
where predicate == null || predicate(student)
因为看起来谓词可以为null,所以需要做更多的工作来考虑未提供该谓词的可能性。
where predicate == null || predicate(student)