![](/img/trans.png)
[英]StartsWith with any string from list to SQL request with LINQ and Entity Framework
[英]LINQ to SQL query where a string StartsWith an element from a generic list
我正在尋找更新我的一個查詢,因為搜索的要求已經改變。 最初,用戶要輸入單個SKU和制造商。 日期范圍以搜索產品目錄。 所以這就是我用過的東西。
DateTime startDate = ...;
DateTime endDate = ...;
string prodSKU = TextSKU.Text.Trim();
var results = from c in db.Products
where c.is_disabled == false
&& c.dom >= startDate
&& c.dom <= endDate
&& c.sku.StartsWith(prodSKU)
select c;
現在要求說用戶可以在文本框中輸入逗號分隔的SKU列表進行搜索。 我很難過的是如何在制造商中找到所有產品。 以skuList中的任何SKU開頭的日期范圍(沒有使用fornext循環)。
string prodSKU = TextSKU.Text.Trim();
List<string> skuList = prodSKU.Split(new char[] { ', ' }).ToList();
var results = from c in db.Products
where c.is_disabled == false
&& c.dom >= startDate
&& c.dom <= endDate
// && c.sku.StartsWith(prodSKU)
select c;
任何想法將不勝感激!
就像是
string prodSKU = TextSKU.Text.Trim();
List<string> skuList = prodSKU.Split(new char[] { ', ' }).ToList();
var results = from c in db.Products
where c.is_disabled ==false
&& c.dom >= startDate
&& c.dom <= endDate
&& skuList.Any(sl=>c.sku.StartsWith(sl))
select c;
string prodSKU = TextSKU.Text.Trim();
List<string> skuList = prodSKU.Split(new char[] { ', ' }).ToList();
var results = from c in db.Products
where c.is_disabled == false
&& c.dom >= startDate
&& c.dom <= endDate
&& skuList.Contains(c.sku)
select c;
編輯:即使這個問題已經回答,我也會把它放在這里。
我實現了與已接受的解決方案相同的功能,但使用擴展方法來提高可讀性:
public static class StringExtensions
{
public static bool StartsWithAny(this string s, IEnumerable<string> items)
{
return items.Any(i => s.StartsWith(i));
}
}
然后解決方案是:
var results = from c in db.Products
where c.is_disabled == false
&& c.dom >= startDate
&& c.dom <= endDate
&& c.sku.StartsWithAny(skuList)
select c;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.