簡體   English   中英

使用帶有實體框架和 LINQ 的單個數據庫查詢搜索多個字符串

[英]Searching for multiple strings using single database query with entity framework and LINQ

假設我有一個包含兩列的數據庫表 (aTable)

編號:整數

名稱:字符串

要求:我想檢索 aTable.name 類似於字符串列表 (stringsToSearchFor) 的條目。

我在做什么:目前我正在使用以下方法

var result=new List<aTable>; 
foreach (var aString in stringsToSearchFor)
    {
        var r = Context.Set<aTable>()
                .Any(s => s.name.Contains(searchString))
                .ToList();
        res.AddRange(r);
    }
return result.Distinct();

為了優化它,我嘗試通過消除 foreach 來更改代碼:

return Context.Set<aTable>()
                    .Any(s => stringsToSearchFor.Contains(s.name))
                    .Distinct()
                    .ToList();

但是,這並沒有提供與之前聲明相同的結果。 我相信第一個說法是正確的。

我的問題:如何在不創建 N 個數據庫查詢的情況下搜索多個字符串(如第二種方法)?

替代解決方案:使用 EF 6.2 Like

.Where(x => stringsToSearchFor.Any(s => DbFunctions.Like(x.name, "%" + s + "%")))

這是DbFunctions.Like的文檔。

這樣的事情應該工作:

string[] stringsToSearchFor = new string[] { "text1", "text2" };

using (MyDbContext model = new MyDbContext())
{
    var result = model.aTable
        .Where(r => stringsToSearchFor.Any(s => r.name.Contains(s)))
        .ToList();
}

暫無
暫無

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

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