自动排除重复项的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循环,但问题是-我不能使用索引,所以它只是麻烦和尴尬。

自动排除重复项的Linq查询(一行)

您可以对结果值执行不同的调用。这样你就不必在内部循环中做了。

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()