検索の要件が変更されたため、クエリの1つを更新したいと考えています。当初、ユーザーは単一の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;