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.

È stato utile?

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
scroll top