Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ将数据集转换为组合框项_C#_Linq_Ienumerable - Fatal编程技术网

C# 使用LINQ将数据集转换为组合框项

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循环,如下所示:

 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());