LINQ:如何使用IQueryable()选择特定列

时间:2017-04-19 17:58:09

标签: c# sql-server entity-framework linq

我只需从Hospital表,HospitalId和Name中选择两列。 我尝试下面的代码,它选择医院表中的所有列,导致性能下降。请帮我从医院表中选择两列

divs.select { |d| d.link(:text =>'Rapid Alignment') }

3 个答案:

答案 0 :(得分:1)

在投影前删除ToList来电:

  var list = query.Select(w => new HospitalInfo()
  {
     Id = w.ID,
     Name = w.Name 

  }).ToList();

通过ToList调用,您可以在进行投影之前实现查询

答案 1 :(得分:1)

IQueryable<T>使用所有过滤器在服务器端执行select查询。因此,工作量减少,变得更快。

IEnumerable<T>在服务器端执行select查询,在客户端加载内存中的数据,然后过滤数据。因此,做更多的工作,变得缓慢。

List<T>只是一种输出格式,虽然它实现了IEnumerable<T>,但与查询没有直接关系。

所以,

var list = query.ToList().Select(w => new HospitalInfo()
    {
        Id = w.ID,
        Name = w.Name 

    }).ToList();

在您的代码中,您使用query.ToList()。这意味着首先它将所有数据拉入内存然后应用Select查询。如果要检索HospitalID和Name,则删除ToList(),然后删除您的代码

   var list = query.Select(w => new HospitalInfo
        {
            Id = w.ID,
            Name = w.Name     
        }).ToList();

答案 2 :(得分:0)

因为您执行了query.ToList(),所以将所有列的整个查询实现到内存中。这实际上是一个坏习惯。相反,删除它,无论如何你已经在最后。您拥有Select投影仅会检索相关列:

var list = query.Select(w => new HospitalInfo()
{
    Id = w.ID,
    Name = w.Name 

}).ToList();