gpt4 book ai didi

c# - 哪个是最高效的 DataSet 查询操作?

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

这样创建查询是否更有效率:

var ordersDataTable = dataSet.Tables["Orders"];

var query = ordersDataTable.Select("OrderType = '" + orderType + "' AND Status = 'ACT'");

或者像这样使用 Linq:

IEnumerable<DataRow> query =
from order in dataSet.Tables["Orders"].AsEnumerable()
where (order.Field<string>("OrderType") == "'" + orderType + "'") &&
(order.Field<string>("Status") == "'ACT'")
select order;

如果您要像这样处理返回的行:

foreach (var p in query)
{...}

问题出现在何时应用过滤器(一次全部应用或创建“生成器”以及每次迭代时是否重新评估 order.Field("OrderType") 构造。

数据来自加载到 DataSet 对象中的 XML 文件。

最佳答案

LINQ 方法将评估 order.Field<string>("OrderType")对于每次迭代,包括那些与未出现在结果中的行相对应的迭代。此外,它将评估 order.Field<string>("Status")对于具有匹配订单类型的每一行。这种行为很难优化,因为 order参数在每次迭代中都不同。您可以通过使用需要 DataColumn 的重载来稍微加快处理速度。 :

var ordTypeCol = ordersDataTable.Columns["OrderType"];
var ordStatusCol = ordersDataTable.Columns["Status"];
var query =
from order in dataSet.Tables["Orders"].AsEnumerable()
where (order.Field<string>(ordTypeCol) == orderType) &&
(order.Field<string>(ordStatusCol) == "ACT")
select order;

注意:下面的拼接表达式

"'" + orderType + "'"

也会在每次迭代中进行评估。然而,这可以通过在 where 之外创建一个变量来优化。条款。不过,这种连接很有可能是不必要的,因为 LINQ 版本不会解析您的文字,因此它不需要在值周围加上引号(感谢 Ivan Stoev 发表评论)。

关于c# - 哪个是最高效的 DataSet 查询操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41814451/

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