单个DataRow的对象初始化

时间:2011-10-18 13:33:06

标签: c# linq object-initialization

要从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"]) });

我尝试了WhereSelectFirstSingle的组合,但无法击中头部!

任何答案都会受到赞赏。

2 个答案:

答案 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"]) };

...但我个人更喜欢带有单独变量的版本用于公共表达式。