要从DataTable填充List,我通常会编写如下语句:
List<Foo> foos = dt.AsEnumerable().Select(dr =>
new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) }).ToList();
当我知道DataTable只会返回1行时,我会如何编写类似的语句来初始化单个对象,如下面的伪代码:
Foo foo = dt.Rows[0].Select(dr =>
new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) });
我只想写一个声明,并希望避免(如果可能的话)2行,如下所示:
DataRow dr = dt.Rows[0];
Foo foo = new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) });
我尝试了Where
,Select
,First
,Single
的组合,但无法击中头部!
任何答案都会受到赞赏。
答案 0 :(得分:2)
Foo foo = dt.AsEnumerable().Select(dr =>
new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) }).Single();
答案 1 :(得分:0)
你可以做:
Foo foo = new Foo { Bar = Convert.ToIn32(dt.Rows[0]["Bar"]),
Baz = Convert.ToDecimal(dt.Rows[0]["Baz"]) };
...但我个人更喜欢带有单独变量的版本用于公共表达式。