带有 linqToEntity 的动态字段 (c#)

发布于 2024-12-01 09:28:18 字数 425 浏览 0 评论 0原文

我的代码:

        public List<tblBook> GetBook(string NameField, string Value)
        {
            return (this.Entities.Book.Where(
            "it.@p0 NOT LIKE @p1",

new ObjectParameter("p0", string.Format("%{0}%", NameField)),

new ObjectParameter("p1", string.Format("%{0}%", Value)))).ToList();

        }

错误:

查询语法无效。近期“@p0”,第 6 行,第 7 列。

my code :

        public List<tblBook> GetBook(string NameField, string Value)
        {
            return (this.Entities.Book.Where(
            "it.@p0 NOT LIKE @p1",

new ObjectParameter("p0", string.Format("%{0}%", NameField)),

new ObjectParameter("p1", string.Format("%{0}%", Value)))).ToList();

        }

error :

The query syntax is not valid. Near term '@p0', line 6, column 7.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

温柔女人霸气范 2024-12-08 09:28:18

字段必须是静态的。您不能在字段名称中使用通配符。此 Where 扩展仅在内部构建 Entity SQL 查询。 Entity SQL 遵循与普通 SQL 相同的规则。

编辑:

正确的代码是:

public List<tblBook> GetBook(string NameField, string Value)
{
    return this.Entities.Book.Where(
               String.Format("it.{0} NOT LIKE @p0", NameField),
               new ObjectParameter("p0", string.Format("%{0}%", Value))).ToList();
    }
}

您必须传递整个字段的名称,并且必须验证它 - 实体 SQL 注入也存在。

Fields must be static. You cannot use wild cards in a field name. This Where extensions only builds Entity SQL query internally. Entity SQL follows the same rules as common SQL.

Edit:

Correct code is:

public List<tblBook> GetBook(string NameField, string Value)
{
    return this.Entities.Book.Where(
               String.Format("it.{0} NOT LIKE @p0", NameField),
               new ObjectParameter("p0", string.Format("%{0}%", Value))).ToList();
    }
}

You must pass whole field's name and you must validate it - Entity SQL injections exists as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文