微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何从对象类型列表中提取一种值

如何解决如何从对象类型列表中提取一种值

我是C#的新手。我想从数据库获取数据并将其分组(帐号及其对应的项目号),将其保存在列表中,然后发送给其他函数。在该功能中,我只想从该列表中提取项目编号,并将这些项目编号作为存储过程的参数一一发送,以进行进一步处理(数据库更新)。

我面临的问题是我无法更新数据库。该控件将转到Console.WriteLine("Failed")。我相信问题出在UpdatePrice函数的foreach循环中(不确定这是什么)造成问题)。

我的努力

我的课程ListItems如下-

class ListItem
{
    public string accountNumber { get; set; }

       public List<string> itemNumbers { get; set; }

       
    }

我成功地能够从数据库获取数据,将其分组并将其发送到UpdatePrice()-

 accounts = (from result in dt.AsEnumerable() group result by result.Field<string>("accountNumber") into g select new ListItem { accountNumber = g.Key,itemNumbers = g.Select(x => x.Field<string>("itemnumber")).ToList() }).ToList();

UpdatePrice(accounts);

现在,这就是我试图从列表accounts提取项目的方式

private void UpdatePrice(List<ListItem> accounts)
        {

            var items = (from item in accounts
            select item.itemNumbers);
 con = new sqlConnection(connection);
            sqlCommand cmd = new sqlCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "sp_updateItems";
            sqlParameter param = new sqlParameter();
            param.ParameterName = "@itemnumber";
            cmd.Parameters.Add(param);
            con.open();
            foreach (var item in items)
            {

                param.Value = item.ToString();
                
                cmd.Connection = con;
                int n = cmd.ExecuteNonQuery();
                if (n > 0)
                    Console.WriteLine("Price Updated Successfully");
                else
                    Console.WriteLine("Failed");
                
            }
            con.Close();
}

这里的foreach循环,不是一次取一个,而是一次取两个。 var item由一次迭代中的2组成。我正在使用的Linq将项目存储在一个组中,在索引0,它有2个项目,在索引1,它有6个项目。我相信这是造成问题的原因。如何简单地将所有项目依次存储在列表中?

修改

我相信我应该更改的是LINQ查询。但是,如何获取所有项目编号以串行方式而不是成组存储?

解决方法

在查询后的UpdatePrice中,items包含一个IEnumerable<List<string>>,因此每次迭代item将是一个List<string>而不是一个string

您可以使用SelectMany来展平图形:

var items = accounts.Select(a => a.itemNumbers).SelectMany(i => i);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。