如何在实体框架中配置Where子句

本文关键字:配置 Where 子句 框架 实体 | 更新日期: 2023-09-27 18:25:19

我想在app.config中配置WHERE子句,所以我遵循了以下方法。。

app.config:

<add key="TYPE" value="'Admin','Manager'"/>

阅读如下:

var types = ConfigurationManager.AppSettings["TYPE"];
var whereClause = types.Replace("'", "'"");

查询中:

var data = (from entry in db.TestTable
            where new[] {whereClause}.Contains(entry.Name)
            select new
            {
              Id = entry.Id,
              FirstName = entry.FName,
              LastName = entry.LName   
            }).ToList();

它没有抛出任何错误,也没有返回任何数据。

我在这里做错了什么?有什么更好的方法可以做到这一点吗?

如何在实体框架中配置Where子句

您正在字符串"Admin", "Manager"中搜索条目。尝试将应用程序设置解析为数组?

<add key="TYPE" value="Admin|Manager"/>

然后

var types = ConfigurationManager.AppSettings["TYPE"];
var whereClause = types.Split('|');

然后像以前一样继续。这应该生成类似SQL的;

select id, firstname, lastname
from testtable
where name in ("Admin", "Manager")

whereClause是单个字符串。在您的示例中,它最终是文本字符串"Admin","Manager"(不是两个字符串,而是一个包含双引号和逗号的字符串)。

您正在创建一个由单个字符串组成的"数组",并查看它是否"包含"entry.Name。因此,除非有一个条目的名称恰好是"Admin","Manager",否则where子句将返回false。

与其用双引号替换单引号,不如拆分字符串并完全删除单引号:

var whereClause = types.Replace("'", "").Split(",");

并将您的查询更改为

var data = (from entry in db.TestTable
            where whereClause.Contains(entry.Name)
            select new
            {
              Id = entry.Id,
              FirstName = entry.FName,
              LastName = entry.LName   
            }).ToList();