17

随着搜索要求的变化,我希望更新我的一个查询。最初,用户要输入一个 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 回答