我正在嘗試使用EF進行查詢。 用戶最多可以使用3個搜索詞,但它們不是必須的。 我如何撰寫一個 EF 查詢,使其對所有使用的搜索字詞發揮 AND 作用,但能夠對任何空的搜索字詞洗掉 AND 呢?
例如,我希望以下內容能夠回傳s1='mobile', s2='', and s3='laptop'的陣列中的前兩個元素。 它沒有回傳任何元素。 如果把s2改成s2='burke',它應該回傳前兩個元素。
例子:
using System;
using System.Linq;
public class Simple {
public static void Main() {
string[] names = { "Burke laptop mobile", "laptop burke mobile", "Computer Laptop" ,
"手機", "Ahemed", "Sania",
"Kungada", "David","United","Sinshia" };
//搜尋字詞。
string s1 = "手機";
string s2 = "";
string s3 = "筆記本電腦";
var query = from s in names
where (!string.IsNullOrEmpty(s1) && s. ToLower().Contains(s1)
&& (!string.IsNullOrEmpty(s2) && s. ToLower().Contains(s2))
&& (!string.IsNullOrEmpty(s3) && s。 ToLower().Contains(s3)
orderby s
select s.ToUpper()。
foreach (string item in query)
Console.WriteLine(item)。
}
}
uj5u.com熱心網友回復:
與其嘗試撰寫一個單一的where陳述句,你可以選擇通過連鎖Where陳述句來擴展一個現有的IQueryable<T>(或IEnumerable<T>如我們的代碼示例將使用)。
var query = names;
if (!string.IsNullOrEmpty(s1))
{
query = query.Where(x => x.Contains(s1))。
}
if (!string.IsNullOrEmpty(s2))
{
query = query.Where(x => x.Contains(s2))。
}
// ... (如果s1,s2,s3是一個陣列,則做一個foreach回圈。)
var results = query.OrderBy(x => x).Select(x => x.ToUpper())。
像這樣將Where串聯起來,相當于將所有where謂詞 "和 "在一起。
編輯:
更新一下為什么你的具體實作不作業,是因為你的&&運算子對于給定的用例是不正確的。
(string.IsNullOrEmpty(s1) || s.ToLower().Contains(s1)) &&。
(string.IsNullOrEmpty(s2) || s.ToLower().Contains(s2)) &&
(string.IsNullOrEmpty(s3) || s.ToLower().Contains(s3))
記住,&&要求左右陳述句都是真,所以在你的例子中! string.IsNullOrEmpty(s2) && s.ToLower().Contains(s2)這是說,s2必須總是不空/空。
uj5u.com熱心網友回復:
請考慮這個:
using System;
using System.Linq;
public class Simple {
public static void Main() {
string[] names = { "Burke laptop mobile", "laptop burke mobile", "Computer Laptop" ,
"手機", "Ahemed", "Sania",
"Kungada", "David","United","Sinshia" };
//搜尋字詞。
string s1 = "手機";
string s2 = "";
string s3 = "筆記本電腦";
var query = from s in names
where (s1 != null && s.ToLower().Contains(s1)
&& (s2 != null && s.ToLower().Contains(s2)
&& (s3 != null && s.ToLower().Contains(s3)
orderby s
select s.ToUpper()。
foreach (string item in query)
Console.WriteLine(item)。
}
}
uj5u.com熱心網友回復:
如果你使用一個陣列或串列而不是多個字串,你可以做這樣的事情
List<string> searchWords = new List< string>
{
"mobile"。
"",
"筆記本電腦", "筆記本電腦".
};
var query = names
.Where(n => searchWords
.Where(s => !string.IsNullOrEmpty(s))
.All(s => n.ToLower().Contains(s)))
.Select(n => n.ToUpper())
.OrderBy(n => n)。
這也更靈活,因為你可以有任何數量的搜索詞,而不需要改變查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/310108.html
標籤:
上一篇:Else陳述句永遠不會達到
