簡體   English   中英

如何在實體框架中配置Where子句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM