如何解决如何从对象类型列表中提取一种值
我是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 举报,一经查实,本站将立刻删除。