web-dev-qa-db-ja.com

LINQでカウント変数をインクリメントできますか?

私はこのようなことをしたいです:

from a in stuff
let counter = 0
select new { count = counter++, a.Name };

しかし、カウンターが読み取り専用であるというエラーメッセージが表示されます。クエリの外部で変数を宣言せずに、これと同様のことを行う方法はありますか?

基本的には、カウント/インデックス列を LINQPad (素晴らしい、BTW)に表示したいだけです。つまり、事前にカウンターを宣言することはできません。

49
Mike Pateras

副作用を使用するのではなく、インデックスを取るSelectのオーバーロードを使用します。

stuff.Select((value, index) => new { index, value.Name });

あなたcould副作用を使用してそれを行いますが、あなたが試みた方法ではありません:

int counter = 0;
var query = from a in stuff
            select new { count = counter++, a.Name };

私はこれに対して強く助言します。

110
Jon Skeet

単にインデックスではなくカウンターにしたい場合は、カウンター宣言をLINQ式の外に移動してください。

var counter = 0;
from a in stuff
select new { count = counter++; a.Name };
6
JaredPar

ここに2つの変数を追加するだけですNumberRowはそのためです

.Select((x,NumberRow) => new ViewModelArchiveOrder
                    {
                        NumberRow= NumberRow + 1,
                    })
0
saeed bagheri