gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:21:52 25 4
gpt4 key购买 nike

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

public HttpResponseMessage GetAvailableHospitalsByAjax(System.Guid? DirectorateOfHealthID = null, System.Guid? UnitTypeID = null, string DeviceTypeIDs = null)
{
Context db = new Context();
var query = db.Hospitals.AsQueryable();
if (UnitTypeID != null)
{
query = query.Where(j => j.HospitalDepartments.Any(www => www.Units.Any(u => u.UnitTypeID == UnitTypeID)));
}

if (DirectorateOfHealthID != null)
{
query = query.Where(h => h.DirectorateHealthID == DirectorateOfHealthID);
}


query = query.Where(j => j.HospitalDepartments.Any(u => u.Units.Any(d => d.Devices.Any(s => s.Status == Enums.DeviceStatus.Free)))
&& j.HospitalDepartments.Any(hd => hd.Units.Any(u => u.Beds.Any(b => b.Status == Enums.BedStatus.Free))));



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

}).ToList();


return Request.CreateResponse(HttpStatusCode.OK, list);
}

最佳答案

IQueryable<T>使用所有过滤器在服务器端执行选择查询。因此工作更少,速度更快。

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

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();

关于c# - LINQ:如何使用 IQueryable() 选择特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43502936/

25 4 0