2

我有以下EF课程:

class Product
{
   public int ProdId { get; set; }
   public int ProdDesc { get; set; }
   public int ProdKeywords { get; set; }
}  

现在我必须实现一个查看ProdDesc和的搜索功能ProdKeywords。关键字注册在 aarray中,产品集合在 a 中IQueryable

string[] keywordsArray = new string[] {"kw1", "kw2", ..., "kwN"};

IQueryable<Product> products = repository.GetProducts();

要查看是否有与关键字匹配的产品,我使用以下LINQ

var matchingProducts = products.Where(p => keywordsArray.Any(k => p.ProdDesc.Contains(k) ||
                                                                  p.ProdKeywords.Contains(k));

这就像 .NET 4 中的魅力一样。

最大的问题是我被迫在.NET 3.5中使用此代码,而我刚刚发现Any并且Contains(LINQ 方法,而不是应用于字符串的方法)在该框架中不起作用。那是一个真正的痛苦。代码太大,无法重写所有内容,而且截止日期太近了。

我发现这篇文章真的很有趣,但我无法让它在我的情况下发挥作用。有人可以帮忙吗?

4

2 回答 2

3

这是关于什么的:

static class Extension   
{
    public static bool Contains(this IEnumerable<object> source, object value)
    {
        foreach (object o in source)
            if (o.Equals(value)) return true;

        return false;
    }
}


var mylist = keywordsArray.ToList();

matchingProducts = products.Where(p => mylist.Exists(k => p.ProdDesc.Contains(k) ||
                                                          p.ProdKeywords.Contains(k));
于 2012-03-28T14:26:00.193 回答
0

您可以先查询 any 并将其存储在可枚举中,然后检查计数是否大于 0

于 2012-03-28T13:35:58.543 回答