如何加快此LINQ查询?

时间:2013-06-10 18:53:40

标签: c# asp.net performance linq entity-framework

我知道有一种更有效的方法可以做到这一点,使用谓词,但是相当新,我不确定如何去做..

List<HousingAssignment> list;

using (OEContext context = new OEContext())
{
    var query =
        from ha in context.HousingAssignments
        where ((ha.BedID == bed.ID) &&
                (((ha.CheckIn <= checkin) && (ha.CheckOut >= checkin)) ||
                ((ha.CheckIn <= checkout) && (ha.CheckOut >= checkout))))
        select ha;

    list = query.ToList();
}

return list.Count;

1 个答案:

答案 0 :(得分:9)

由于您只是返回计数,因此您可以使用Count方法在查询中对其进行计算:

using (OEContext context = new OEContext())
{
  var query =
    from ha in context.HousingAssignments
    where ((ha.BedID == bed.ID) &&
            (((ha.CheckIn <= checkin) && (ha.CheckOut >= checkin)) ||
            ((ha.CheckIn <= checkout) && (ha.CheckOut >= checkout))))
    select ha;

  return query.Count();  
}

这样就无需在本地从数据库中提取值,存储到列表中,然后“丢弃”结果。相反,计数将在服务器上计算,并且您只需拉一个数字。

您还可以通过正确编制CheckInCheckOut列的索引来加速服务器上的查询。