【发布时间】:2020-10-18 07:31:47
【问题描述】:
我正在尝试传递包含需要过滤的字段的字符串列表。
string[] filterList = {"CostCenterId", "Description", ....}
对象定义:
public class CostCenter
{
public int Id { get; set; }
public string CostCenterId { get; set; }
public string Description { get; set; }
}
而不是做:
var filterData = data
.Where(x => x.CostCenterId.Contains(request.Filter) || x.Description.Contains(request.Filter));
是否可以通过传入 string 来获取 lambda 表达式中的属性:Where()?
是否可以这样做:
var filterData = data
.Where(x => x["CostCenterId"].Contains(request.Filter) || x.["Desription"]
.Contains(request.Filter));
从 filterList 中替换值:
var filterData = data
.Where(x => x[filterList[0]].Contains(request.Filter) || x.[filterList[1]
.Contains(request.Filter));
我尝试了以下方法:
var filterData = data
.Where(x => x.GetType().GetField("CostCenterId").Name.Contains(filter) || x.GetType().GetField("Description").Name.Contains(filter));
但这不起作用,
预期结果是过滤后的数据。我现在得到的结果是空的,任何帮助将不胜感激
【问题讨论】:
-
“这不起作用”不多说了。这是一个 EF/其他 ORM 查询吗?您得到什么错误/意外结果?
-
抱歉,我忘了在我的问题中提到这是一个 EF 查询。预期结果是过滤后的数据。我现在得到的结果是空的。
-
使用 DynamicLinq,除非您这样做是为了在 EF 之上进行一些抽象,例如您正在尝试创建一个通用的
QueryTableWhere("tablename", "columnname1", "value1", "columnname2", "value2")类型方法 - 在这种情况下,不要麻烦..它最终只会让你绊倒,让每一个角落的情况变得越来越难,而不是一开始就写一个直接的 LINQ 查询
标签: c# asp.net entity-framework linq lambda