为了在表中选择属于特定组的元素,如果元素及其组类型包含在一个表中,并且所有组类型都列在另一个表中,我们对表执行除法。我正在尝试 LINQ 查询来执行相同的操作。请告诉我我该怎么做?
问问题
279 次
2 回答
1
显然,从你想要相交和除外的那篇博客文章的定义来看。
Table1.Except(Table1.Intersect(Table2));
或者更确切地说,在你的情况下,我猜
Table1.Where(d => !Table2.Any(t => t.Type == d.Type));
没那么难。
实际上,我不认为性能可以做得更好。也许与一个groupby。
Table1.GroupBy(t => t.Type).Where(g => !Table2.Any(t => t.Type == g.Key)).SelectMany(g => g);
这应该对性能更好。仅在第二个表中搜索每种类型一次,而不是针对 Table1 中的每一行。
于 2013-08-10T18:24:21.943 回答
0
确切地确定您要问的是什么有点困难。但是,听起来您正在寻找确定两个表或流中常见的元素。如果是这样,我想你想要相交。
它的工作原理是这样的:
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
var intersect = array1.Intersect(array2);
返回 2 和 3。
与此相反的是Except()。
于 2013-08-10T17:47:32.923 回答