【问题标题】:Unable to set paramaters for PredicateBuilder无法为 PredicateBuilder 设置参数
【发布时间】: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


    【解决方案1】:

    实际查询需要有“AsExpandable()”:

                    List<UserData> dbRecord = await db.UserData.AsExpandable()
                        .Include(ud => ud.UserKey)
                        .Where(pb).ToListAsync();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多