目前我從我的回購列表中返回所有內容。我期待將這些更改爲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