Сколько LINQ много ко многим с поиском ИЛИ? - PullRequest
0 голосов
/ 06 октября 2010

У меня следующая структура таблицы:

Таблица пользователей

ID  | Name
1   | John
2   | Ted
3   | Alice
4   | Barney

и таблица UserLanguages ​​

ID  | UserID | Language
1   | 1      | 1
2   | 1      | 5
3   | 2      | 2
4   | 2      | 3
5   | 3      | 3
6   | 4      | 4
7   | 4      | 5

Я проверяю языки 2,3 и 4 и я хочу получить пользователей: 2,3,4.Я хочу получить пользователей, у которых есть хотя бы что-то из выбранных языков (или 2, 3 или 4). Как получить с LINQ?

Ответы [ 2 ]

1 голос
/ 06 октября 2010

Примерно так должно работать:

var query = from u in db.Users
            join l in db.UserLanguages on u.ID equals l.UserID
            group l.Language by u into langs
            where langs.Any(l => l == 2 || l == 3 || l == 4)
            select langs.Key;

Мое предложение использовать построитель предикатов слишком сложно.IEnumerable<T>.Contains(), очевидно, работает в LINQ-to-SQL (чего я не знал).Это должно быть намного проще.

var languages = new[] { 2, 3, 4 };
var query = from u in db.Users
            join l in db.UserLanguages on u.ID equals l.UserID
            group l.Language by u into langs
            where langs.Any(l => languages.Contains(l))
            select langs.Key;
0 голосов
/ 06 октября 2010

Вы можете использовать что-то вроде Jon Skeet, предложенное в вашем предыдущем вопросе ( Как искать LINQ со многими параметрами в одном столбце? )

Это должно работать, но не проверено:

int[] languages = new[] {2, 3, 4};
var query = dataContext.UserLanguages
    .Where(ul => languages.Contains(ul.Language))
    .Select(ul => ul.User)
    .Distinct();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...