5
var multiples = from i in Enumerable.Range(min, (max - min))
                        from r in roots
                        where i % r == 0
                        select i;

たとえば、2 回roots = {2,10}選択するとします。20

ここで重複を避けることは可能ですか?

4

4 に答える 4

10

個別の使用

var multiples = (from i in Enumerable.Range(min, (max - min))
                 from r in roots
                 where i % r == 0
                 select i).Distinct();

stringこれは、 や などの単純なタイプでうまく機能しますint匿名型ではあまりうまくいきません。

あなたの場合、iは であるintため、重複を整理することができるはずです。

編集

実際、匿名型で機能します(Jeppe のコメントを参照)。@Jeppeが言ったように、匿名型には、toオブジェクトが等しい/重複しているかどうかを決定する「良い」Equalsことができるからです。Distict

于 2013-03-08T06:52:09.733 に答える
8

Any()完全なデカルト結合の代わりに使用できます。

var multiples = from i in Enumerable.Range(min, (max - min))
                where roots.Any(r => i % r == 0)
                select i;

これには、成功した要素が見つかるとすぐに要素のテストを停止するという追加の利点がrootsあり、個別の要素を引き出すために 2 回目のパススルーを必要としません。

于 2013-03-08T06:56:06.897 に答える
3

DISTINCTを使用する

var multiples = (from i in Enumerable.Range(min, (max - min))
                        from r in roots
                        where i % r == 0
                        select i).Distinct();
于 2013-03-08T06:52:41.387 に答える
1

Distinct()メソッドを使用してください

var multiples = (from i in Enumerable.Range(min, (max - min))
                 from r in roots
                 where i % r == 0
                 select i).Distinct();
于 2013-03-08T06:59:38.960 に答える