自动排除重复项的Linq查询(一行)
本文关键字:查询 Linq 一行 排除 | 更新日期: 2023-09-27 18:11:48
我有一个linq查询项目欧拉问题243:
var y = from n in factors
from m in factors where m != n
select n * m;
问题是,对于素数因子2和3,它产生y ={6,6}而它只需要是{6}
是否有一种方法可以做到这一点,而不需要多次调用y.c distinct()或y.c contains () ?
我也考虑过使用两个foreach循环,但问题是-我不能使用索引,所以它只是麻烦和尴尬。
您可以对结果值执行不同的调用。这样你就不必在内部循环中做了。
var y = factors.SelectMany(n => factors.Where(m => n < m).Select(m => n * m)).Distinct();
如果是factors = new[] { 2,3 }
,结果是{ 6 }
。如果是factors = new[] { 2,3,4,6 }
,你得到的是{ 6,8,12,18,24 }
而不是{ 6,8,12,12,18,24 }
。注意结果中没有额外的12
正如Rick Sladkey所说,改变
from m in factors where m != n
from m in factors where m < n
产生正确的结果,而不必使用.Distinct()
。