簡體   English   中英

如何在C#中將項目列表與數據庫匹配

[英]How to match a list of item to database in C#

我有一個字符串列表

List<string> list = new List<string>();
list.Add("john");
list.Add("David");
list.Add("Sam");

現在我想檢查我在數據庫中的列是否包含這些列表項。

var v = db.employee.where(s => s.Content.Contains(list));

我的問題是如何在不使用任何循環的情況下僅在一個查詢中將所有列表項與數據庫列匹配。 如果單個列表項與列匹配,則查詢必須返回結果。 我上面提到的查詢不起作用。 請幫我解決這個問題。

這僅適用於假設您的db是一個實體框架DbContext並且s.Content是一個string 如果您使用的是其他一些 ORM,那么它可能不起作用。

List<string> list = new List<string>();
list.Add("john");
list.Add("David");
list.Add("Sam");

var v = db.employee.Where(s => list.Contains(s.Content)).ToList();

你可以這樣做:

List<string> list = new List<string>();
list.Add("john");
list.Add("David");
list.Add("Sam");
var v = db.employee
    .ToList()
    // This filtering doesn't happen in your SQL server.
    .Where(s => list.Any(x => s.Content.Contains(x)));

您可以嘗試省略.ToList()行,但恐怕您的 ORM 不知道如何將查詢轉換為 SQL。

如果您希望在 SQL 中執行整個查詢,您應該考慮以這種方式構建查詢:

var query = db.employee.AsQueryable();
query = list.Aggregate(query, 
    (query, name) => query.Where(empl => empl.Content.Contains(name)));

關於什么:

 List<string> list = new List<string> {"john", "Warwick", "Sam"};

 var vresult = _db.employee.Where(x => list.Contains(x.Content)).ToList();

請指出您的期望......? 就像它不工作?

如果 return 不同於 null,則存在。

public List<Employee> CheckIfExists(List<string> nameList)
{
    if (nameList == null)
    {
        return null;
    }

    string inClause = "";

    foreach (var item in nameList)
    {
        inClause = string.Format("{0},{1}", inClause, item);
    }

    return db.employee.SqlQuery("SELECT * FROM employee WHERE employee.Name IN (@p0)", inClause).ToList(); 
}

list 的每個元素都將作為參數傳遞給s.Content.Contains ,這里 s 是員工記錄。

var v = db.employee.Where(s => list.Any(s.Content.Contains));

這可能會對您有所幫助,列出 name= {"john", "David", "Sam"} 您想檢查雇員表中是否存在 John/David/Sam。 以下查詢是檢查員工中是否存在特定名稱

var _data = _db.employee.Where(emp => list.Any(li => li.name == emp.name)).ToList();

查詢語法中的 LINQ:

var result = from o in db.employee
             where list.Contains(o.Content)
             select o;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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