gpt4 book ai didi

c# - 在 LINQ 查询中构造对象后立即调用方法

转载 作者:太空狗 更新时间:2023-10-30 00:58:29 25 4
gpt4 key购买 nike

我有一些实现这个接口(interface)的对象:

public interface IRow
{
void Fill(DataRow dr);
}

通常当我从数据库中选择一些东西时,我会去:

public IEnumerable<IRow> SelectSomeRows
{
DataTable table = GetTableFromDatabase();
foreach (DataRow dr in table.Rows)
{
IRow row = new MySQLRow(); // Disregard the MySQLRow type, it's not important
row.Fill(dr);
yield return row;
}
}

现在有了 .Net 4,我想使用 AsParallel,因此也想使用 LINQ。

我已经对它做了一些测试,它加快了很多事情(IRow.Fill 使用反射,所以它对 CPU 来说很难)

无论如何,我的问题是,我如何着手创建一个 LINQ 查询,它调用 Fills 作为查询的一部分,以便正确并行化?

为了测试性能,我创建了一个将 DataRow 作为参数的构造函数,但是我真的希望尽可能避免这种情况。

有了构造函数,显然就足够简单了:

public IEnumerable<IRow> SelectSomeRowsParallel
{
DataTable table = GetTableFromDatabase();
return from DataRow dr in table.Rows.AsParallel()
select new MySQLRow(dr);
}

但是就像我说的那样,我真的很希望能够将我的 Fill 方法填充到 LINQ 查询中,因此不需要构造函数重载。

最佳答案

你需要做一个多语句的 lambda 表达式,像这样:

table.AsEnumerable().AsParallel().Select(dr => 
IRow row = new MySQLRow();
row.Fill(dr);
return row;
});

关于c# - 在 LINQ 查询中构造对象后立即调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754525/

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