找不到查询模式Error的实现

时间:2012-03-21 13:50:21

标签: c# linq

鉴于

   var selectedItems = listBoxControl1.SelectedItems;
   var selectedItemsList = (from i in selectedItems
                             select i).ToList();

我收到错误

  

无法找到源类型的查询模式的实现   'DevExpress.XtraEditors.BaseListBoxControl.SelectedItemCollection'。   找不到“选择”。考虑明确指定的类型   范围变量'i'。

using system.LINQ完成

我可以使用foreach,因此必须实现IEnumerable。如果可能的话,我更喜欢使用LINQ over foreach来收集每个字符串。

我想在列表框控件中为每个SelectedItem获取ToString()值,并将它们粘贴在List<string>中。我该怎么办?

3 个答案:

答案 0 :(得分:14)

  

我可以使用foreach,因此它必须实现IEnumerable。

事实并非如此,但这与此无关。 实现IEnumerable,但不是IEnumerable<T>,这是LINQ的工作原理。

列表中的实际上是什么?如果它已经是字符串,您可以使用:

var selectedItemsList = selectedItems.Cast<string>().ToList();

或者,如果它是“任何对象”,并且您想要拨打ToString,则可以使用:

var selectedItemsList = selectedItems.Cast<object>()
                                     .Select(x => x.ToString())
                                     .ToList();

请注意,对Cast的调用是使用明确键入的范围变量建议的错误消息的原因 - 以from Foo foo in bar开头的查询表达式将转换为bar.Cast<Foo>()...

答案 1 :(得分:7)

要使LINQ工作,你需要IEnumerable<T>,直接IEnumerable是不够的。尝试:

var selectedItems = listboxControl1.SelectedItems.Cast<T> //where T is the actual type of the item

答案 2 :(得分:1)

尝试

var result = listBoxControl1.SelectedItems.Cast<MyItemType>().ToList();