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

时间:2011-10-21 03:56:47

标签: c# linq optimization query-optimization

我有项目euler问题243的linq查询:

var y = from n in factors
        from m in factors where m != n
        select n * m;

问题是,对于素数因子2和3,它产生y = {6,6},它只需要{6}。

有没有办法在不多次调用y.Distinct()或y.Contains()的情况下执行此操作?

我还考虑过使用两个foreach循环,但问题是 - 我不能使用索引,所以它只是麻烦和笨拙。

2 个答案:

答案 0 :(得分:1)

您可以对结果值进行不同的调用。这样您就不必在内循环上执行此操作。

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

答案 1 :(得分:1)

正如Rick Sladkey所述,正在改变

    from m in factors where m != n

    from m in factors where m < n

生成正确的结果,而不必使用.Distinct()