我目前有一个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.???
答案 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;