Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将IEnumerable类型转换为List类型?_C#_Linq_Linq To Sql_Ado.net - Fatal编程技术网

C# 如何将IEnumerable类型转换为List类型?

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

我试图获取某些数据库值并将它们存储在数据表中。在那之后,我将linq应用于组中的所有数据和帐号。我将最终结果存储在以下类类型的列表中-

  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实例,然后你必须分组,就像你做的那样。然后,对于组中的每个元素,可能会有许多项,因此需要将它们全部选中。试着分析代码,你会比我解释的更好地理解它谢谢!我会努力使我的基础更加牢固。