17

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

どんなアイデアでも大歓迎です!

4

2 に答える 2

22

何かのようなもの

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; 
于 2011-02-11T15:52:44.080 に答える
4
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;
于 2011-02-11T15:36:49.173 に答える