要选择属于表中特定组的元素,如果元素及其组类型包含在一个表中,并且所有组类型都列在另一个表中,则我们对表执行除法。 我正在尝试LINQ查询来执行相同的操作。请告诉我我该怎么做呢?
答案 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)
确切地确定你要问的内容有点困难。但是,听起来您正在寻找确定两个表或流中常见的元素。如果是这样,我想你想要相交。
它的工作原理如下:
int[] array1 = { 1, 2, 3 };
int[] array2 = { 2, 3, 4 };
var intersect = array1.Intersect(array2);
返回2和3.
与此相反的是Except()。