【发布时间】:2021-01-12 15:15:28
【问题描述】:
我以为我遇到了一个完全不同的问题,但在解决这个问题时,我相信我找到了真正的问题。但是,我不知道为什么会这样。
我正在使用 PredicateBuilder (LinqKit) 构建动态查询以根据用户输入提取数据。
这里是我为搜索分配变量的地方:
var pb = PredicateBuilder.New<UserData>(true);
foreach (var item in lstParams)
{
string name = "City";// item.spName;
string val = "Port";// item.spValue;
pb = pb.And(ud => ud.VarName.Contains(name)).And(ud => ud.VarValue.Contains(val));
}
item.spName 等于“City”,item.spValue 等于“Port”。当我运行上面的代码时,我没有看到“City”和“Port”,而是看到了对变量的引用:
{ud => (ud.VarName.Contains(value(DAL.DBAccessMethods.DataAccess+<>c__DisplayClass78_0).name) AndAlso ud.VarValue.Contains(value(DAL.DBAccessMethods.DataAccess+<>c__DisplayClass78_0).val))}
在解决这个问题时,我将变量硬编码到 PredicateBuilder 中,并且名称显示在检查中并且查询有效。
pb = pb.And(ud => ud.VarName.StartsWith("City"));
pb = pb.And(ud => ud.VarValue.StartsWith("bl"));
在检查时我看到了这个:
{ud => (ud.VarName.StartsWith("City") AndAlso ud.VarValue.StartsWith("Port"))}
如何将变量放入 PredicateBuilder 对象?
【问题讨论】:
标签: c# entity-framework