我正在尝试DataSet
并将每个项目添加到ComboBox
。
我目前正在使用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.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1]);
但是,我的ComboBox
只有1项:&#34; System.Linq.Enumerable&#34;。
答案 0 :(得分:1)
.Add()
只会添加一个项目。
尝试使用相同的方法,但请使用.AddRange()
,这会将Object
的{{1}}添加到ComboBox
:
cmbCauseForRepair.Items.AddRange(from r in ds.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1]);
答案 1 :(得分:1)
LINQ不会为您循环记录。你仍然需要这样做。
如果cmbCauseForRepair.Items.Add()
的重载接受了枚举值,那么您就不需要了。但它并没有。它只接受an object
。根据该文档,该对象将被视为:
项目的直观表示显示在组合框中。此内容表示由DisplayMember属性指定。如果DisplayMember属性为null,则调用项的ToString方法以获取组合框中显示的字符串;否则,将显示DisplayMember属性指定的存储对象的属性。
由于传递给Add()
的对象属于IEnumerable<string>
类型,因此其.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);
或使用a different method添加它们:
cmbCauseForRepair.Items.AddRange(from r in ds.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1]);
答案 2 :(得分:0)
最好使用string.Format
而不是串联字符串
cmbCauseForRepair.Items.AddRange(ds.Tables[0].Rows.Cast<DataRow>().Select(p => string.Format("{0}:{1}", p[0], p[1])).ToArray());