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

本文关键字:模型 LINQ 何访问 访问 | 更新日期: 2023-09-27 18:34:46

我目前有一个 linq 查询,可以从我的产品表中随机选择 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.???

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

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

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

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

如果将查询处理到列表中,则可以直接按索引访问每个元素:

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;