Как мне сделать Contains () в DLINQ со списком предметов? - PullRequest
1 голос
/ 03 марта 2009

Я хочу создать запрос dlinq, который проверяет, есть ли в заголовке какое-либо количество элементов. Я знаю, что вы можете сделать .Contains() со списком, но мне нужно проверить, содержит ли заголовок какой-либо из элементов, а не содержит ли он часть заголовка. Например: у меня есть три элемента в списке "бекон, курица, свинина" . Мне нужно название "птичник" , чтобы соответствовать.

   var results = (from l in db.Sites
   where list.Contains(l.site_title)
   select l.ToBusiness(l.SiteReviews)).ToList();

Если я попробую первые 2 ответа, я получу ошибку "Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator."

Третье решение дает мне

Метод 'System.Object DynamicInvoke (System.Object [])' не имеет поддерживаемого перевода в SQL. "

Ответы [ 3 ]

2 голосов
/ 03 марта 2009

Попробуйте следующее. Вы можете использовать комбинацию Where и Any для поиска совпадений подстроки.

var results = (from l in db.Sites
                where list.Where(x => 0 != x.IndexOf(l)).Any()
                select l.ToBusiness(l.SiteReviews)).ToList();
1 голос
/ 04 марта 2009

Я наконец понял это. Спасибо моему доброму приятелю Кори за помощь. Есть два способа сделать это.

var resultSets = (from k in list
                  select (from b in db.Sites
                          where b.site_title.Contains(k)
                          select b.ToBusiness()).ToList<Business>()).ToList();

 List<Business> all = new List<Business>();

 for (int i = 0; i < resultSets.Count; ++i)
 {
     all.AddRange(resultSets[i]);
 }

Это запрос linq, который успешно выполнит то, что заявлено. Кроме того, вы также можете просто создать SQL-запрос в виде простого текста вручную.

1 голос
/ 03 марта 2009

Одним из способов является динамическое построение запроса, как показано здесь:

http://andrewpeters.net/2007/04/24/dynamic-linq-queries-contains-operator/

...