如何访问LINQ模型中的特定行?

时间:2012-05-21 16:54:32

标签: c# asp.net-mvc linq

我目前有一个linq查询从我的products表中选择5个随机行。一旦我在模型中有了集合,我该如何访问特定的行?我正在使用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 个答案:

答案 0 :(得分:6)

您应该只运行一次查询,然后使用foreach迭代行,或者只使用index属性选择适当的产品

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;

答案 1 :(得分: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

我将ToArray()添加到初始查询中,基于Douglas&#39;评论。否则,每次拉出任何内容时都会重新运行查询(因为linq&#39; s .Take(n)被延迟)。

答案 2 :(得分:1)

您可以简单地遍历结果集合,并获取所需的第n个索引。

Product product = null;
int index = 0;

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

    index++;
}

答案 3 :(得分:0)

如果将查询处理为List,则可以通过索引直接访问每个元素:

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;