Я пишу сервис RIA, который также предоставляется с использованием SOAP.Один из его методов должен читать данные из очень большой таблицы.
Сначала я делал что-то вроде:
public IQueryable<MyItem> GetMyItems()
{
return this.ObjectContext.MyItems.Where(x => x.StartDate >= start && x.EndDate <= end);
}
Но потом я остановился, потому что беспокоился о производительности.
Насколько я понимаю, MyItemsis полностью загружен, а "Where" просто фильтрует элементы, которые были загружены при первом доступе к свойству MyItems.Поскольку у MyItems будет действительно много строк, я не думаю, что это правильный подход.
Я попытался немного погуглить вопрос, но никаких интересных результатов не получилось.
Итак, я подумал, что смогу создать новый экземпляр контекста внутри метода GetMyItems и выборочно загрузить MyItems.Что-то вроде:
public IQueryable<MyItems> GetMyItems(string Username, DateTime Start, DateTime End)
{
using (MyEntities ctx = new MyEntities ())
{
var objQuery = ctx.CreateQuery<MyItems>(
"SELECT * FROM MyItems WHERE Username = @Username AND Timestamp >= @Start AND Timestamp <= @End",
new ObjectParameter("@Username", Username),
new ObjectParameter("@Start", Start),
new ObjectParameter("@End", End));
return objQuery.AsQueryable();
}
}
Но я совсем не уверен, что это правильный способ сделать это.
Не могли бы вы помочь мне и указать правильный подход для этого?
Заранее спасибо, Ура, Джанлука.