找不到查询模式的实现错误
Posted
技术标签:
【中文标题】找不到查询模式的实现错误【英文标题】:Could not find an implementation of the query pattern Error 【发布时间】:2012-04-06 01:14:35 【问题描述】:给定
var selectedItems = listBoxControl1.SelectedItems;
var selectedItemsList = (from i in selectedItems
select i).ToList();
我收到错误
找不到源类型的查询模式的实现 'DevExpress.XtraEditors.BaseListBoxControl.SelectedItemCollection'。 未找到“选择”。考虑明确指定 范围变量“i”。
using system.LINQ
完成
我可以使用foreach,所以它必须实现IEnumerable
。如果可能的话,我更喜欢使用 LINQ 而不是 foreach 来收集每个字符串。
我想为列表框控件中的每个 SelectedItem 获取 ToString()
值并将它们粘贴到 List<string>
中。我该怎么做?
【问题讨论】:
对于一个 foreach 来处理关键字 in 之后的对象类型只需要一个名为 GetEnumerator() 的方法,它反过来返回一个类型的对象,该对象具有 MoveNext() 方法和一个当前财产。它确实不需要需要实现 IEnumerable 【参考方案1】:我可以使用 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>()...
【讨论】:
实现foreach需要什么? @P.Brian.Mackey:一种名为GetEnumerator()
的方法,它被声明为返回具有合适MoveNext()
和Current
成员的类型。它不必实现IEnumerable
。使用具有(比如)int
的 Current
属性的类型是在泛型之前迭代时避免装箱的一种方法。
只需登录即可上传此内容【参考方案2】:
要使 LINQ 工作,您需要一个 IEnumerable<T>
,直接 IEnumerable 是不够的。试试:
var selectedItems = listboxControl1.SelectedItems.Cast<T> //where T is the actual type of the item
【讨论】:
【参考方案3】:试试吧
var result = listBoxControl1.SelectedItems.Cast<MyItemType>().ToList();
【讨论】:
以上是关于找不到查询模式的实现错误的主要内容,如果未能解决你的问题,请参考以下文章
找不到源类型“System.Data.Entity.DbSet”的查询模式的实现
apk 发布模式下 shared_prefrences 的颤振错误(在通道 plugins.flutter.io/shared_preferences 上找不到方法 getAll 的实现)