-1

要从 DataTable 填充列表,我通常会编写如下语句:

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不能一针见血!SelectFirstSingle

一如既往的任何答案表示赞赏。

4

2 回答 2

2
Foo foo = dt.AsEnumerable().Select(dr =>
    new Foo { Bar = Convert.ToIn32(dr["Bar"]),
              Baz = Convert.ToDecimal(dr["Baz"]) }).Single();
于 2011-10-18T13:34:31.437 回答
0

那么你可以这样做:

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

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

于 2011-10-18T13:34:56.087 回答