是否可以仅返回匹配所有列表值的人LINQ?
我有一个表klist,其中有两列可用:
Kid - Tableid
001 1
001 2
002 1
003 3
004 1
004 2
Run Code Online (Sandbox Code Playgroud)
我有一个包含tid值的列表:
List<int> tid = new List<int>();
tid.Add(1);
tid.Add(2);
Run Code Online (Sandbox Code Playgroud)
现在tid列表中有1和2个值.
所以我的问题是,从klist表中我将只获得kid包含所有tid列表值并与表id进行比较的那些.
此后的预期结果是
kid - 001
kid - 004
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询:
var lb = Klist.Where(t => tid .Contains(t.Tableid)).Select(k => k.Kid).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)
但是返回所有匹配的孩子,如果即使是单一匹配,那么他们也会给出结果,但我只想要那些匹配所有表id和tid列表的人. 我的查询结果是
kid - 001
kid - 002
kid - 003
kid - 004
Run Code Online (Sandbox Code Playgroud)
请LINQ为此建议一个查询.
为了实现你想要的,你首先需要Group通过以下方式树立你的价值观Kid:
Klist.GroupBy(k => k.Kid)
Run Code Online (Sandbox Code Playgroud)
结果是不同Kids 及其相应Tableids 的列表。
之后,我们需要选择所有Tableids 都与 s 相同的组tid。这可以通过从两个列表中删除相同的元素来实现,使用Except. 然后我们检查是否没有剩余元素(即两个集合相等)。
.Where(g => tid.Except(g.Select(s => s.Tableid)).Count() == 0)
Run Code Online (Sandbox Code Playgroud)
最后,获取剩余组的 ,在组中Kid存储为:Key
.Select(g => g.Key);
Run Code Online (Sandbox Code Playgroud)
如果我们将所有内容组装在一起,我们会得到以下 LINQ 查询:
var lb = Klist.GroupBy(k => k.Kid).Where(g => tid.Except(g.Select(s => s.Tableid)).Count() == 0).Select(g => g.Key);
Run Code Online (Sandbox Code Playgroud)
返回元素001和004
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |