C# 如何将IEnumerable类型转换为List类型?
我试图获取某些数据库值并将它们存储在数据表中。在那之后,我将linq应用于组中的所有数据和帐号。我将最终结果存储在以下类类型的列表中-C# 如何将IEnumerable类型转换为List类型?,c#,linq,linq-to-sql,ado.net,C#,Linq,Linq To Sql,Ado.net,我试图获取某些数据库值并将它们存储在数据表中。在那之后,我将linq应用于组中的所有数据和帐号。我将最终结果存储在以下类类型的列表中- class ListItems { public string accountNumbers { get; set; } public string itemNumbers { g
class ListItems
{
public string accountNumbers
{
get;
set;
}
public string itemNumbers
{
get;
set;
}
}
我的代码是:
List<ListItems> accounts = new List<ListItems>();
public void GetItems(int ID1, int ID2)
{
con = new SqlConnection(connection);
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sp_FetchItems";
cmd.Parameters.AddWithValue("@id1", ID1);
cmd.Parameters.AddWithValue("@id2", ID2);
cmd.Connection = con;
SqlDataAdapter adp = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adp.Fill(dt);
accounts = from result in dt.AsEnumerable()
group result by result.Field<string>("accountNumber");
}
List accounts=new List();
公共void GetItems(intID1、intID2)
{
con=新的SqlConnection(连接);
SqlCommand cmd=新的SqlCommand();
cmd.CommandType=CommandType.storedProcess;
cmd.CommandText=“sp_FetchItems”;
cmd.Parameters.AddWithValue(“@id1”,id1);
cmd.Parameters.AddWithValue(“@id2”,id2);
cmd.Connection=con;
SqlDataAdapter adp=新的SqlDataAdapter(cmd);
DataTable dt=新的DataTable();
自动进料(dt);
accounts=来自dt.AsEnumerable()中的结果
按结果字段(“accountNumber”)分组结果;
}
我得到以下错误
无法隐式转换类型
“System.Collections.Generic.IEnumerable”到
'System.Collections.Generic.List
在线
accounts = from result in dt.AsEnumerable()
group result by result.Field<string>("accountNumber");
accounts=from dt.AsEnumerable()中的结果
按结果字段(“accountNumber”)分组结果;
我甚至尝试使用ToList()转换此表达式,但它也不起作用。尝试以下操作:
class ListItem
{
public string accountNumber { get; set; }
public List<string> itemNumbers { get; set; }
}
accounts = (from result in dataTable.AsEnumerable() group result by result.Field<string>("accountNumber") into g select new ListItems { accountNumber = g.Key, itemNumbers = g.Select(x => x.Field<string>("<itemNumber>")).ToList() }).ToList();
类列表项
{
公共字符串accountNumber{get;set;}
公共列表项编号{get;set;}
}
accounts=(从dataTable.AsEnumerable()中的结果按result.Field(“accountNumber”)将结果分组到g中,选择新列表项{accountNumber=g.Key,ItemNumber=g.select(x=>x.Field(“”).ToList()).ToList();
解释如下:
ListItems
类更改为ListItem
,并将ItemNumber
属性的类型更改为List
ListItem
实例中,按accountNumber
列分组,并将所有项目存储在ItemNumber
属性中问题不在于IEnumerable=>列表,而是泛型类也不兼容。如果不知道数据行中的内容,则无法回答此问题。您试图实现什么目标-每多行一个
列表项?如果是这样的话,属性可能应该是不同的类型、数组或IEnumerable
,而不仅仅是string
。如果您希望从ADO返回对象,为什么不使用一个我无法理解的问题。您是在询问我的数据表中存储了哪些值吗?@ricardopers在我的数据库“我的表”中存储了一个与我有许多项的帐号相对应的帐号。我只是获取它们并将其存储在数据表中。现在,我想按这些项目及其各自的帐号进行分组,并将结果存储在我的类类型的列表中。抱歉,忘记更改为列表(.ToList())。感谢它的工作,但我只是想了解,我做错了什么?好吧,DataTable的AsEnumerable()扩展方法返回DataRow实例,然后你必须分组,就像你做的那样。然后,对于组中的每个元素,可能会有许多项,因此需要将它们全部选中。试着分析代码,你会比我解释的更好地理解它谢谢!我会努力使我的基础更加牢固。