目前我从我的回购列表中返回所有内容。我期待将这些更改为IQueryable,以便人们可以优化结果,而不会受到另一个SQL请求(我正在使用nhibernate)。IQueryable <T>问题
我有一个问题,虽然,使生活在每个人更容易我有这样的事情在我的回购
public List<CalendarAppointment> GetAppointment(Student student, DateTime start, DateTime end)
{
List<CalendarAppointment> appointments = session.Query<CalendarAppointment>().Where(x => x.Student.Id == student.Id
&& x.Start.Date >= start.Date && x.End.Date <= end.Date)
.Take(QueryLimits.Appointments).ToList();
return appointments.ConvertToLocalTime(student);
}
public static List<CalendarAppointment> ConvertToUtcTime(this List<CalendarAppointment> appointments, Student student)
{
if (student != null)
{
TimeZoneInfo info = TimeZoneInfo.FindSystemTimeZoneById(student.TimeZoneId);
foreach (var appointment in appointments)
{
appointment.Start = TimeZoneInfo.ConvertTimeToUtc(appointment.Start,info);
appointment.End = TimeZoneInfo.ConvertTimeToUtc(appointment.End,info);
}
}
return appointments;
}
所以我目前得到的结果回来,然后将时间转化为本地时间。这样我们就不必担心它。
如果我使用IQueryable完成此操作,会发生什么情况。它会关闭并触发SQL吗?
我觉得有一个小姐的理解。当我说“一切”时,我的意思是没有任何所有收藏都作为列表返回。它不是我我从数据库中返回每一条记录。它只会返回我需要的记录。我没有在我给出的例子中使用通用回购。不确定你测试的意思。如果我在哪里测试它,我会模拟出这个方法,并用Moq来返回结果。您将不得不详细说明它在实体中的外观。 – chobo2
我的观点是你不应该将IQueryable作为存储库方法的返回结果公开。 http://stackoverflow.com/questions/7513681/mocking-out-nhibernate-queryover-with-moq/7518039#7518039 – Dmitry
嗯。 GetAppointmentInStudentTimeZone是一种方法,它是一种回购方法,服务层方法?我原来是这样做的,所以当你需要时区时你会转换它,但是这导致了很多ppl没有转换它的问题,或者不知道他们有什么时区。有人认为最好只是在需要的时区出现(因为每次计算都需要正确的时区)。如果不是它需要一个参数,我可能会创建另一个属性,并将其称为LocalEndTime,它将调用EndTime Zone并将其转换为get方法。 – chobo2