3
4

3 回答 3

4

您的查询返回一个IEnumerable,而您的方法必须返回一个List<B>
您可以通过ToList()扩展方法将查询结果转换为列表。

public class A
{
   public List<B> Load(Collection coll)
   {
       List<B> list = (from x in coll select new B {Prop1 = x.title, Prop2 = x.dept}).ToList();
       return list;
   }
}

列表的类型应该由编译器自动推断。如果不是,您将需要调用ToList<B>().

于 2012-12-02T11:06:57.083 回答
3

您需要将枚举转换为列表,有一个扩展方法可以为您做到这一点,例如试试这个:

    var result = from x in coll select new B {Prop1 = x.title, Prop2 = x.dept};
    return result.ToList();
于 2012-12-02T11:08:15.487 回答
2

您不能将更通用类型的对象转换为更具体的对象。

让我们想象一下,我们有一个 B 的列表和 B 的 IEnumerable:

List<B> BList = ...
IEnumerable<B> BQuery = ...

你可以这样做:

IEnumerable<B> collection = BList;

但你不能这样做:

List<B> collection = BQuery;

因为集合是一个比 IEnumerable 更具体的对象。

因此,您应该在您的情况下使用扩展方法 ToList() :

(from x in coll
select new B 
  {
    Prop1 = x.title, 
    Prop2 = x.dept
  }
).ToList()
于 2012-12-02T11:30:20.490 回答