如何在Entity Framework中配置Where子句

时间:2015-12-02 17:29:33

标签: c# entity-framework linq

我想在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();

不会丢失任何错误,也不会返回任何数据。

我在这里做错了什么?有没有更好的方法来实现这个目标?

2 个答案:

答案 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();