如何在实体框架中配置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();
它没有抛出任何错误,也没有返回任何数据。
我在这里做错了什么?有什么更好的方法可以做到这一点吗?
您正在字符串"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();