[英]How to Configure the Where clause in Entity Framework
我想在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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.