Linq返回IEnumerable <myobject>,如何返回MyListObject?</myobject>

时间:2009-02-17 02:20:18

标签: c# .net linq

有没有办法不循环所有IEnumerable来获取对象内部的数据(继承BindingList)?

MyListObject--> Transformed with Linq --> Back the data inside MyListObject

我知道我可以这么做。但是它没有做我想做的事情。

有什么想法吗?谢谢:))

3 个答案:

答案 0 :(得分:2)

一个选项是通过使用/添加构造函数将返回的IEnumerable包装到集合类型中,该构造函数将IEnumerable视为CStick建议。也许更为优雅的方式是为IEnumerable类型添加一个可以返回集合的扩展方法:

static MyListObject ToMyList(this IEnumerable<T> en) {
  // construct your MyListObject from 'en' somehow
}


// And then just write:
var mylist = (from c in ... ).ToMyList()

对于这个简单的场景,最后一个可能过于复杂的选项是为你的类型实现所有LINQ查询运算符(扩展方法Where,Select和许多其他的)。更重要的是你可以(可能)更有效地做一些事情,但这确实有点困难。

答案 1 :(得分:2)

我不确定您的要求是什么,特别是关于ToList没有做您需要的事情。

很遗憾,BindingList<T>仅在其构造函数中接受IList<T>参数,而不是IEnumerable<T>

但是,如果在自定义集合上实现了一个传递构造函数(或者如果它已经有一个构造函数需要IList<T>),那么你可以做类似的事情:

public class MyListObject<T> : BindingList<T>
{
    public MyListObject() : base() { }
    public MyListObject(IList<T> list) : base(list) { }
}

// ...

MyListObject<int> yourList = new MyListObject<int> { 1, 2, 3, 4, 5 };
yourList = new MyListObject<int>(yourList.Select(s => s * 2).ToList());
// yourList now contains 2, 4, 6, 8, 10

答案 2 :(得分:1)

大多数列表接受构造函数中的一系列对象。那会有用吗?

Dim objects = 'Linq statement returning IEnumberable array.
Dim mlo As New MyListObject(objects) 
相关问题