2017-09-25 32 views
1

私はいくつかのプロパティを持つクラスRを持っています。タイプ 'System.Data.EnumerableRowCollection <System.Data.DataRow>'をgeneric.listに変換できません<T>

同様に、私は私が上から2つの異なるDataTablesを作成しようとしていますR

クラスのプロパティとまったく同じ列を持つDataTabledtは、のいずれかの列の条件に基づいてDataTabledtを言っていdt

そして、これら2つのオブジェクトをListRオブジェクトに変換します。

List<R> Sheet1 = dt.AsEnumerable() 
    .Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) <= Convert.ToDecimal(80)); 

List<R> Sheet2 = dt.AsEnumerable() 
    .Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) > Convert.ToDecimal(80)); 

しかし、それは誤りスロー:

は、これは私が今進行にしようとしています方法です

List<R> Sheet1 = (List<R>)dt.AsEnumerable() 
    .Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) <= Convert.ToDecimal(80)); 

List<R> Sheet2 = (List<R>)dt.AsEnumerable() 
    .Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) > Convert.ToDecimal(80)); 

Cannot convert type 'System.Data.EnumerableRowCollection' to generic.list

私は鋳造のすべての種類をやってみましたがが、役に立たないと


List<R> Sheet1 = (List<R>)dt.AsEnumerable() 
    .Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) <= Convert.ToDecimal(80)) 
    .ToList(); 

List<R> Sheet2 = (List<R>)dt.AsEnumerable() 
    .Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) > Convert.ToDecimal(80)) 
    .ToList(); 
+1

'R'がここには何? 'st.Select'メソッドを使うか、リストの代わりに' var'を使ってみてください

+1

'R'とは何ですか? 'System.Data.Row'のサブクラスでなければ、既存の' System.Data.Row'から新しい 'R'を初期化するコードを書く必要があります。キャスティングは魔法ではありません。 AをBにキャストするとき、Aは* be * a Bでなければならないか、A *を* Bに変換するコードがなければなりません。 –

+1

本当に 'R'のようなクラスがありますか?短い名前は利用できませんでしたか?私はあなたのファーストクラスは 'A'だと思います。 –

答えて

2

Whereの文はEnumerableRowCollection<DataRow>を返します。あなたはこの作品を作るためにあなたのクエリからRListを選択する必要があります。

List<R> Sheet1 = dt.AsEnumerable(). 
     Where(row => Convert.ToDecimal(row["SomeDecimalColumn"]) <= Convert.ToDecimal(80)) 
    .Select(c => new R 
     { SomeDecimalColumn = Convert.ToDecimal(c["SomeDecimalColumn"]) /*other propertie*/ }) 
    .ToList(); 
関連する問題