Linq to sql 如何使用或搜索LINQ多对多?

Linq to sql 如何使用或搜索LINQ多对多?,linq-to-sql,Linq To Sql,我有以下表格结构: 表用户 ID | Name 1 | John 2 | Ted 3 | Alice 4 | Barney 和表用户语言 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。 我希

我有以下表格结构:

表用户

ID  | Name
1   | John
2   | Ted
3   | Alice
4   | Barney
和表用户语言

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,34,我想得到用户:2,3,4。 我希望获得至少具有某种选定语言(或2、3或4)的用户
如何使用LINQ?

类似的功能应该可以使用:

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.Contains()
显然在LINQtoSQL中工作(我不知道)。这应该容易得多

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;

您可以使用Jon Skeet在前面的问题()中建议的内容

这应该是可行的,但没有经过测试:

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

当我不懂搜索语言时,我怎么写呢<代码>int[]语言=新[]{2,3,4};var result=query.Where(x=>x.WorkTypes.Any(y=>WorkTypes)).Any(x=>x.ArrayOfNeedLanguages)非常感谢!在网上搜索了一半,什么也没有。很简单。Love LINQ:)哦,我没有意识到
IEnumerable.Contains()
在LINQ to SQL中工作。以前从未为我工作过。:)@杰夫-是的,当你使用它的时候,你必须小心,它对你期望的任何场景都不起作用,我也用它打了好几次死胡同。罗布·科纳利(Rob Conry)的这篇文章提供了更多细节:啊,你知道吗,我一直在使用
Any()
,只是测试语义上或多或少相同的相等性。这是行不通的。@Jeff-基本上是一样的,但是当你不知道数组将有多少个元素时,这是行不通的(谓词生成器可以工作,但它确实太复杂了)。“那不行”-你指的是我的问题?