2

我目前有一个 linq 查询来从我的产品表中选择 5 个随机行。一旦我的模型中有集合,我如何访问特定行?我正在使用 First() 来获取我的第一行,但我不确定如果我想从该查询的第三行获取数据我会使用什么。

谢谢!

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

您应该只运行一次查询,然后使用 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;
于 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

如果将查询处理为 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;
于 2012-05-21T17:00:02.827 回答