Инициализация объекта из одного DataRow - PullRequest
0 голосов
/ 18 октября 2011

Чтобы заполнить список из 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, Select, First, Single, но не могу поразить гвоздь в голову!

Любые ответы, как всегда, приветствуются.

Ответы [ 2 ]

2 голосов
/ 18 октября 2011
Foo foo = dt.AsEnumerable().Select(dr =>
    new Foo { Bar = Convert.ToIn32(dr["Bar"]),
              Baz = Convert.ToDecimal(dr["Baz"]) }).Single();
0 голосов
/ 18 октября 2011

Ну, вы можете сделать:

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

... но лично я бы предпочел версию с отдельной переменной для общего выражения.

...