作者:依一勇婷16_639 | 来源:互联网 | 2023-02-06 08:13
我们来看看这段代码:
IList list = new List();
var table = adapter.GetData(); //get data from repository object -> DataTable
if (table.Rows.Count >= 1)
{
for (int i = 0; i {
var anno = new HouseAnnouncement();
anno.Area = float.Parse(table.Rows[i][table.areaColumn].ToString());
anno.City = table.Rows[i][table.cityColumn].ToString();
list.Add(anno);
}
}
return list;
是用更少的代码和更好的方式(必须是:-))写出来的更好的方法吗?也许使用lambda(但让我知道如何)?
提前致谢!
解决方法:
仅供参考,您永远不会将新的HouseAnnouncement添加到您的列表中,并且您的循环将永远不会执行到最后一行,但我假设这些是示例中的错误而不是实际代码中的错误.
你可以这样做:
return adapter.GetData().Rows.Cast().Select(row =>
new HouseAnnouncement()
{
Area = Convert.ToSingle(row["powierzchnia"]),
City = (string)row["miasto"],
}).ToList();
我通常为了简洁而可读性,但我觉得这很可读.
请注意,虽然您仍然可以缓存DataTable并在lambda中使用table.powierzchniaColumn,但我删除了它,因此您没有使用不是必需的闭包(闭包会给lambda的内部实现带来很大的复杂性,所以我尽可能避免它们.
如果您按原样保留列引用很重要,那么您可以这样做:
using (var table = adapter.GetData())
{
return table.Rows.Cast().Select(row =>
new HouseAnnouncement()
{
Area = Convert.ToSingle(row[table.powierzchniaColumn]),
City = (string)row[table.miastoColumn],
}).ToList();
}
这会增加编译器生成的实际IL的复杂性,但应该为您完成.