如何使用OR搜索LINQ多少?

时间:2010-10-06 09:36:59

标签: linq-to-sql

我有以下表结构:

表用户

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 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

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;

答案 1 :(得分:0)

您可以使用之前问题(How search LINQ with many parametrs in one column?

中建议的Jon Skeet

这应该有用,但没有经过测试:

int[] languages = new[] {2, 3, 4};
var query = dataContext.UserLanguages
    .Where(ul => languages.Contains(ul.Language))
    .Select(ul => ul.User)
    .Distinct();