我有以下表结构:
表用户
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?
答案 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();