gpt4 book ai didi

c# - linq在特定条件下获取多个值

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:53 25 4
gpt4 key购买 nike

我正在使用此查询根据特定条件获取特定值中的值..

for (int i = 0; i < 50; i++)
{
DataRow dr = gridviewdt.NewRow();

dr[0] = dt.AsEnumerable()
.Where(l => l.Field<int?>("ID") == items[i].curing_id)
.Select(l => l.Field<string>("description"))
.First()
.ToString();

dr[1] = (from row in dt.AsEnumerable()
where row.Field<int?>("ID") == items[i].curing_id
select row).Count();

dr[2] = (from row in dt.AsEnumerable()
where row.Field<int?>("ID") == items[i].curing_id && row.Field<int?>("status") == 1
select row).Count();

dr[3] = (from row in dt.AsEnumerable()
where row.Field<int?>("ID") == items[i].curing_id && row.Field<int?>("status") == 2
select row).Count();

dr[4] = (from row in dt.AsEnumerable()
where row.Field<int?>("ID") == items[i].curing_id && row.Field<int?>("status") == 3
select row).Count();

griddt.Rows.Add(dr);
}

上述这些语句需要更多时间在循环中多次执行查询,而且数据表 dt 包含数十万条记录。我希望它是这样的

for (int i = 0; i < num_of_curing; i++)
{
DataRow dr = gridviewdt.NewRow();

dr[0] = dt.AsEnumerable()
.Where(l => l.Field<int?>("ID") == items[i].curing_id)
.Select(l => l.Field<string>("description"))
.First()
.ToString();

data = dt.AsEnumerable().Where(l => l.Field<int?>("ID") == items[i].curing_id)
.Select(g => new
{
dr[1] = g.Count(),
dr[2] = (g.Field<int?>("status") == 1).Count(),
dr[3] = (g.Field<int?>("status") == 2).Count(),
dr[4] = (g.Field<int?>("status") == 3).Count()

});

gridviewdt.Rows.Add(dr);
}

是否可以按上述方式或任何其他最佳方式编写?

最佳答案

它很慢,因为您要进行多个查询,而您可以进行一个查询。

这段代码只会进行一次查询并将结果存储在一个数组中。然后,您可以安全地使用这些数据。

此外,如果 i 被限制为 items 的数量,则不需要 for 循环:

foreach (var item in items)
{
DataRow dr = griddt.NewRow();

var data = dt
.AsEnumerable()
.Where(l => l.Field<int?>("ID") == item.curing_id)
.Select(l => new {
description = l.Field<string>("description"),
status = l.Field<int?>("status")
})
.ToArray();

dr[0] = data[0].description;
dr[1] = data.Count();
dr[2] = data.Count(d => d.Status == 1);
dr[3] = data.Count(d => d.Status == 2);
dr[4] = data.Count(d => d.Status == 3);

griddt.Rows.Add(dr);
}

关于c# - linq在特定条件下获取多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34170366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com