将IQueryable <>类型对象转换为List <T>类型?

Vik*_*kas 48 c# list iqueryable

我有IQueryable <>对象.

我想将它转换为List <>,其中包含选定的列IQueryable<>.

编辑

马克,你是对的!

但我只能访问FindByAll()方法(因为我的架构).

它给了我IQueryable <>中的整个对象.

我有严格的要求(为select标签创建json对象)只有list <> type with two fields.

Mar*_*ell 67

然后就是Select:

var list = source.Select(s=>new { ID = s.ID, Name = s.Name }).ToList();
Run Code Online (Sandbox Code Playgroud)

(编辑)实际上 - 在这种情况下可以推断出名称,所以你可以使用:

var list = source.Select(s=>new { s.ID, s.Name }).ToList();
Run Code Online (Sandbox Code Playgroud)

这节省了一些电子......

  • 如果你的意思是你需要在层之间返回这个对象,那么你需要创建一个带有ID和Name的常规类型,然后选择(s => new YourType {ID = s.ID,Name = s.Name}) .ToList(); (5认同)

Han*_*sir 42

使用System.Linq添加并调用IQueryable <>上的ToList()

  • 简单、精确、美丽! (2认同)

mmm*_*eff 8

List类的构造函数可以为您转换IQueryable:

public static List<TResult> ToList<TResult>(this IQueryable source)
{
    return new List<TResult>(source);
}
Run Code Online (Sandbox Code Playgroud)

或者你可以在没有扩展方法的情况下转换它,当然:

var list = new List<T>(queryable);
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是IQueryable.ToList()应该已经存在,我们需要自己添加它作为扩展是愚蠢的. (6认同)

Bri*_*sio 6

System.Linq在IQueryable <>和IEnumerable <>上有ToList().但是,它会导致完整的数据传递将其放入列表中.执行此操作时,您将失去延迟调用.如果它是数据的消费者,那没什么大不了的.