2

クラス :

class Foo
{
    public int Id { get; set; }
    public string Name { get; set; }
}

リスト

List<Foo> lst = new List<Foo>();

データ表 :

 DataTable dt = GetFromDb ()....

lstからのレコードを入力したいdt

私はなんとかやってきた:

Array.ForEach(dt.AsEnumerable().ToArray(), y = > lst.Add(new Foo()
{
    Id = int.Parse(y["id"].ToString()), Name = y["name"].ToString()
}));

質問 :

  1. 私は他のようなことをすることはできません dt.AsEnumerable().Select(_ => fill lst )か?

選択署名の一部(この場合)はコンパイルされないことを知っていますFunc<datarow,void>

しかし、それでも、私の醜い方法以外にこれを行う他の方法はありますか?

4

5 に答える 5

7

これを試して

var fooList = (from t in dt.AsEnumerable() 
         select new Foo { Id = t.Field<int>("Id"), 
                          Name= t.Field<string>("Name") }).ToList();

DataTableのAsEnumerable拡張メソッドは、DataRowsのコレクションを返します。次に、必須フィールドを使用してLinq結果から予測を行います。dataRowタイプであるため、各列タイプを指定する必要があります。

于 2012-08-06T15:29:56.123 に答える
7

LINQ to DataSetの使用:

var foos = from row in dt.AsEnumerable()
           select new Foo()
           {
              Id = row.Field<int>("id"),
              Name = row.Field<string>("name")
           };

// create a new list
List<Foo> lst = foos.ToList();

// update: add items to an exisiting list
fooList.AddRange(foos);
于 2012-08-06T15:31:43.573 に答える
4

あなたは正しい方向に進んでいます、あなたは次のことをすることができます:

lst = dt.AsEnumerable().Select(y = > new Foo()
{
    Id = Convert.ToInt32(y["id"]), Name = y["name"] as string
}).ToList();

編集:既存のリストに追加するには

私は通常、2つのリストを連結するだけです。

lst = lst.Concat(dt.AsEnumerable().Select(...)).ToList();

しかし、ken2kの答えを見て、代わりに使い始めると思いますAddRange

于 2012-08-06T15:28:29.267 に答える
2

あなたができること:

List<Foo> lst = dt.AsEnumerable().Select(z => new Foo
{
    Id = int.Parse(z["id"].ToString()),
    Name = z["name"].ToString()
}).ToList();

編集:

既存のインスタンスに追加するList<Foo>場合:

lst.AddRange(dt.AsEnumerable().Select(z => new Foo
{
    Id = int.Parse(z["id"].ToString()),
    Name = z["name"].ToString()
}));
于 2012-08-06T15:28:35.887 に答える
1

Rowsプロパティを介して別の解決策を取得しました:

 List<Foo> results = (from DataRow myRow in dt.Rows
                               select new Foo()
                            {
                              Id =int.Parse( row["id"].ToString()),
                              Name = row["name"].ToString()
                             }).ToList();
于 2012-08-06T19:21:14.470 に答える