2

現在、製品テーブルから 5 つのランダムな行を選択する linq クエリがあります。モデルにコレクションを作成したら、特定の行にアクセスするにはどうすればよいですか? First() を使用して最初の行を取得していますが、そのクエリの 3 行目からデータを取得する場合に何を使用するかわかりません。

ありがとう!

var Model = (from r in DB.Products select r).OrderBy(r => Guid.NewGuid()).Take(5);

var ProductID1 = Model.First().ProductID;
var ProductID3 = Model.???
4

4 に答える 4

6

クエリを 1 回だけ実行してから foreach を使用して行を反復処理するか、インデックス プロパティを使用して適切な製品を選択する必要があります。

var Model = (from r in DB.Products select r).OrderBy(r => Guid.NewGuid()).Take(5).ToList();

var ProductID1 = Model[0].ProductID;
var ProductID2 = Model[1].ProductID;
于 2012-05-21T16:58:58.993 に答える
2
var Model = (from r in DB.Products select r)
             .OrderBy(r => Guid.NewGuid())
             .Take(5).ToArray(); 

var ProductID1 = Model.First().ProductID;
var ProductID3 = Model.Skip(2).First() <-- 3rd row

Douglas のコメントに基づいて、最初のクエリに ToArray() を追加しました。そうしないと、何かを引き出すたびにクエリが再実行されます (linq の .Take(n) が延期されているため)。

于 2012-05-21T16:56:41.220 に答える
1

結果コレクションを単純に繰り返し処理し、必要な n 番目のインデックスを取得できます。

Product product = null;
int index = 0;

foreach (Product p in DB.Products)
{
    if (index == 3)
    {
        product = p;
        break;
    }

    index++;
}
于 2012-05-21T16:55:36.230 に答える
0

クエリをリストに処理すると、インデックスによって各要素に直接アクセスできます。

var Model = (from r in DB.Products select r)
    .OrderBy(r => Guid.NewGuid())
    .Take(5)
    .ToList(); //Process into a list

var ProductID1 = Model[0].ProductID;
var ProductID3 = Model[3].ProductID;
...
var ProductID100 = Model[100].ProductID;
于 2012-05-21T17:00:02.827 に答える