什么是LINQ运算符来对表执行除法运算?

时间:2013-08-10 17:32:46

标签: sql linq relational-division

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

2 个答案:

答案 0 :(得分: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中的每一行。

答案 1 :(得分:0)

确切地确定你要问的内容有点困难。但是,听起来您正在寻找确定两个表或流中常见的元素。如果是这样,我想你想要相交。

Take a look here

它的工作原理如下:

int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
var intersect = array1.Intersect(array2);

返回2和3.

与此相反的是Except()。