inizializzazione dell'oggetto da un'unica DataRow
-
26-10-2019 - |
Domanda
per compilare un elenco da un DataTable Io di solito scrivere una dichiarazione come questa:
List<Foo> foos = dt.AsEnumerable().Select(dr =>
new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) }).ToList();
Come posso scrivere una dichiarazione simile per inizializzare un singolo oggetto quando so DataTable tornerà solo 1 riga come il seguente pseudo codice :
Foo foo = dt.Rows[0].Select(dr =>
new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) });
Vorrei scrivere una sola istruzione e vogliono evitare (se possibile) 2 linee in questo modo:
DataRow dr = dt.Rows[0];
Foo foo = new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) });
Ho cercato combinazioni di Where
, Select
, First
, Single
ma non riesce a colpire il chiodo sulla testa!
Tutte le risposte come mai sono apprezzati.
Soluzione
Foo foo = dt.AsEnumerable().Select(dr =>
new Foo { Bar = Convert.ToIn32(dr["Bar"]),
Baz = Convert.ToDecimal(dr["Baz"]) }).Single();
Altri suggerimenti
Ebbene si possono fare:
Foo foo = new Foo { Bar = Convert.ToIn32(dt.Rows[0]["Bar"]),
Baz = Convert.ToDecimal(dt.Rows[0]["Baz"]) };
... ma personalmente preferisco la versione con una variabile separata per l'espressione comune.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow