Zac*_*ott 6 c# linq where-clause
如果您创建一个Filter对象,其中包含Linq的条件,通常在where子句中,如下所示:
var myFilterObject = FilterFactory.GetBlank();
myFilterObject.AddCondition("Salary", "lessThan", "40000");
var myResult = myRepository.GetEmployees(myFilterObject);
Run Code Online (Sandbox Code Playgroud)
如何在不使用大案例陈述的情况下将Linq字段与字段名称匹配?
return from e in db.Employee
where e.Salary < 40000
select new IList<EmployeeViewModel> { Name= e.name, Salary= e.Salary };
Run Code Online (Sandbox Code Playgroud)
我假设您需要将一个对象发送到指定过滤的存储库,以便您只提取所需的记录.我假设Linq没有预编译(除非您创建自定义委托和函数),因此您应该能够动态指定要筛选的字段.
如果你可以像某些类型的Expando对象那样做e ["Salary"]这样的话会很好.
小智 10
您可以手动构建表达式,如下所示:
var eParam = Expression.Parameter(typeof(Employee), "e");
var comparison = Expression.Lambda(
Expression.LessThan(
Expression.Property(eParam, "Salary"),
Expression.Constant(40000)),
eParam);
return from e in db.Employee.Where(comparison)
select new EmployeeViewModel { Name = e.name, Salary = e.Salary };
Run Code Online (Sandbox Code Playgroud)
我建议您查看Linq to SQL示例中的Dynamic Query.您可以使用它以"纯文本"编写条件,例如:
var employees = db.Employee.Where("Salary < 40000").Select(...);
Run Code Online (Sandbox Code Playgroud)
澄清一下:这些扩展本质上是通过lambdas构造的字符串构建相同的表达式树,因此这与在数据库中编写原始SQL不同.唯一的缺点是你不能使用查询理解语法(from x in y等).