从单个DataRow初始化对象

本文关键字:对象 初始化 DataRow 单个 | 更新日期: 2023-09-27 18:11:48

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

我想只写一个语句,并希望避免(如果可能的话)像这样的两行:

DataRow dr = dt.Rows[0];
Foo foo = new Foo { Bar = Convert.ToIn32(dr["Bar"]),
                    Baz = Convert.ToDecimal(dr["Baz"]) });

我试过Where, Select, First, Single的组合,但都不能一针见血!

从单个DataRow初始化对象

Foo foo = dt.AsEnumerable().Select(dr =>
    new Foo { Bar = Convert.ToIn32(dr["Bar"]),
              Baz = Convert.ToDecimal(dr["Baz"]) }).Single();

:

Foo foo = new Foo { Bar = Convert.ToIn32(dt.Rows[0]["Bar"]),
                    Baz = Convert.ToDecimal(dt.Rows[0]["Baz"]) };

…但我个人更喜欢有单独变量的版本