Как переписать LINQ Any(), чтобы сделать его подходящим для.NET 3.5

У меня есть следующий класс EF:

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

Теперь я должен реализовать функцию поиска, которая смотрит на ProdDesc а также ProdKeywords, Ключевые слова зарегистрированы в array и сбор продуктов в 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, а не тот, который применяется к строкам) не работает в этой среде. Это настоящая боль. Код слишком большой, чтобы все переписать, а крайний срок слишком близок.

Я нашел эту статью действительно интересной, но я не могу заставить ее работать в моем случае. Кто-нибудь может помочь?

2 ответа

Что насчет:

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));

Вы можете запросить сначала any и сохранить это в перечислимом и проверить, если число больше 0

Другие вопросы по тегам