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,3和4,我想得到用户: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-基本上是一样的,但是当你不知道数组将有多少个元素时,这是行不通的(谓词生成器可以工作,但它确实太复杂了)。“那不行”-你指的是我的问题?