我只需从Hospital表,HospitalId和Name中选择两列。 我尝试下面的代码,它选择医院表中的所有列,导致性能下降。请帮我从医院表中选择两列
divs.select { |d| d.link(:text =>'Rapid Alignment') }
答案 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();