2017-09-25 394 views
1

我有一个类R具有一些属性。无法将类型'System.Data.EnumerableRowCollection <System.Data.DataRow>'转换为generic.list <T>

同样我有基于条件上的一列的DataTabledt一个DataTabledt与作为类的R

我试图创建从上述2个不同DataTables性质完全相同的列表示dt

我想将这些2 Datatables转换为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)); 

但它抛出一个错误:

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)); 

List<R> Sheet2 = (List<R>)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)) 
    .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必须是* B,或者必须有一些代码被调用来将A *转换成* a B. –

+1

你真的有类似'R'的类吗?更短的名字werent可用?我想你的第一堂课是'A' –

回答

2

您的Where声明正在返回EnumerableRowCollection<DataRow>。您需要从您的查询选择R一个List,使这个工程:

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(); 
相关问题