-3

为了在表中选择属于特定组的元素,如果元素及其组类型包含在一个表中,并且所有组类型都列在另一个表中,我们对表执行除法。我正在尝试 LINQ 查询来执行相同的操作。请告诉我我该怎么做?

4

2 回答 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 回答