C# 使用LINQ将数据集转换为组合框项
我试图获取一个数据集,并将每个项目添加到一个组合框中 我目前正在使用foreach循环,如下所示:C# 使用LINQ将数据集转换为组合框项,c#,linq,ienumerable,C#,Linq,Ienumerable,我试图获取一个数据集,并将每个项目添加到一个组合框中 我目前正在使用foreach循环,如下所示: foreach (DataRow row in ds.Tables[0].Rows) { cmbCauseForRepair.Items.Add(row[0].ToString() + ":" + row[1].ToString()); } 我想用LINQ来做这个 以下是我正在尝试的: cmbCauseForRepair.Items.Add(from r in ds.T
foreach (DataRow row in ds.Tables[0].Rows)
{
cmbCauseForRepair.Items.Add(row[0].ToString() + ":" + row[1].ToString());
}
我想用LINQ来做这个
以下是我正在尝试的:
cmbCauseForRepair.Items.Add(from r in ds.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1]);
但是,我的组合框只有一项:System.Linq.Enumerable。.Add只添加一项
尝试相同的方法,但使用,它将对象集合添加到组合框:
LINQ没有为你翻阅记录。你仍然需要这样做 如果cmbCauseForRepair.Items.Add有一个接受值枚举的重载,则不需要这样做。但事实并非如此。它只是接受。根据该文件,该对象将被视为: 组合框中将显示项目的视觉表示形式。此内容表示形式由DisplayMember属性指定。如果DisplayMember属性为null,则调用项的ToString方法以获取组合框中显示的字符串;否则,将显示DisplayMember属性指定的存储对象的属性 由于传递给Add的对象的类型为IEnumerable,因此其.ToString表示形式为:
`IEnumerable<string>`
基本上,您需要在对象中循环以一次添加一个对象:
var items = from r in ds.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1];
foreach (var item in items)
cmbCauseForRepair.Items.Add(item);
或用于添加它们:
cmbCauseForRepair.Items.AddRange(from r in ds.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1]);
最好使用string.Format而不是串联字符串
cmbCauseForRepair.Items.AddRange(ds.Tables[0].Rows.Cast<DataRow>().Select(p => string.Format("{0}:{1}", p[0], p[1])).ToArray());
目前所有的答案都没有涉及真正的问题。真正的问题。通过使用add range,我现在有12个条目显示System.Linq.Enumerable。LovetheDownVote您是如何使用AddRange的?cmbCauseForRepair.Items.AddRange与上面的代码相同。只需将add更改为addrange。ds.Tables[0].Rows.Cast中的cmbCauseForRepair.Items.AddRangefrom r选择r[0]+:+r[1];我投了赞成票,接受了你的回答,但没有简单地说声谢谢。
cmbCauseForRepair.Items.AddRange(ds.Tables[0].Rows.Cast<DataRow>().Select(p => string.Format("{0}:{1}", p[0], p[1])).ToArray());