我想在WHERE
中配置app.config
子句,所以我遵循以下方式..
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();
不会丢失任何错误,也不会返回任何数据。
我在这里做错了什么?有没有更好的方法来实现这个目标?
答案 0 :(得分:2)
您正在搜索字符串"Admin", "Manager"
以查找该条目。将应用程序设置试用到数组中?
<add key="TYPE" value="Admin|Manager"/>
然后
var types = ConfigurationManager.AppSettings["TYPE"];
var whereClause = types.Split('|');
然后像以前一样继续。这应该生成SQL like;
select id, firstname, lastname
from testtable
where name in ("Admin", "Manager")
答案 1 :(得分:0)
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();