使用LINQ将数据集转换为组合框项
本文关键字:组合 转换 LINQ 数据集 使用 | 更新日期: 2023-09-27 18:24:11
我正在尝试获取一个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
只有一项:"System.Linq.Enumerable".
LINQ不会为您循环记录。你仍然需要这样做。
如果cmbCauseForRepair.Items.Add()
有一个重载,它接受值的枚举,那么你就不需要了。但它没有。它只接受一个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);
或者使用不同的方法添加它们:
cmbCauseForRepair.Items.AddRange(from r in ds.Tables[0].Rows.Cast<DataRow>()
select r[0] + ":" + r[1]);
.Add()
只添加一个项目。
尝试相同的方法,但使用.AddRange()
,它将Object
的集合添加到ComboBox
:
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());