2016-07-28 1 views
0

Этот запрос возвращает идентификаторы дверей, к которым у двери_ид есть все соответствующие теги.Преобразование запроса Llinq из всех совпадений в OR (по крайней мере, один тег должен совпадать)

List<decimal> matchingDoors db.tags 
    .Where(x => x.user_id == userId && (null == SystemId|| x.syid == SystemId)) 
    .GroupBy(x => x.door_id)   
    .Where(x => tags.All(y => 
      x.Any(z => z.name == y))) 
    .Select(x => x.Key).ToList<decimal>(); 

Как я могу изменить запрос, чтобы возвращать результаты, которые соответствуют хотя бы одному тегу ('OR')?

+0

@a_horse_with_no_name проверить это. –

+0

Он возвращает только тех, кто соответствует обоим. –

+0

Неверный запрос, обновляющий вопрос –

ответ

1

Вы должны использовать метод Contains() на tags коллекции. Вот вы:

List<decimal> matchingDoors db.tags 
    .Where(x => x.user_id == userId && (null == SystemId|| x.syid == SystemId)) 
    .GroupBy(x => x.door_id)   
    .Where(x => x.Any(y => tags.Contains(y))) //this is where magic 
    .Select(x => x.Key).ToList<decimal>(); 
+0

симпатичный. Спасибо, мой друг. –

 Смежные вопросы

  • Нет связанных вопросов^_^