ObjectQuery <T>или IQueryable <T> - PullRequest
       18

ObjectQuery <T>или IQueryable <T>

2 голосов
/ 25 ноября 2010

Я использую ObjectQuery в качестве источника данных для пары BindingSources в моем приложении winforms. Проблема в том, что я привык к Linq-подобным запросам, поэтому я использую их, определяя источник данных:

View.DsMyDataSource = (from p in ModelContext.GetContext.MyObject 
                       where p.Deleted == false  p) as ObjectQuery<MyObject>;

ModelContext.GetContext() возвращает синглтон моего объекта modelContext.

Это хороший способ сделать это? Боюсь, что при использовании запросов типа LINQ я могу что-то потерять из-за приведения.

Есть ли другой способ получить тип ObjectQuery с использованием синтаксиса linq?

Спасибо за любую подсказку.

1 Ответ

4 голосов
/ 29 ноября 2010

Ну, на самом деле ObjectQuery<T> реализует IQueryable<T>, поэтому реальной разницы нет.

Я бы посоветовал не связываться с IQueryable, поскольку это дает слишком много возможностей пользовательскому интерфейсу. Смысл IQueryable состоит в том, чтобы отложить выполнение запросов на более поздний момент времени (такой как BLL, уровень служб), но IMO представления слишком поздно.

Когда я говорю, что уже слишком поздно, я имею в виду, что к тому времени, когда запрос попадает в пользовательский интерфейс, больше нет запросов к базе данных. Но если пользовательский интерфейс начинает выполнять такие операции, как .Count() или .Sum(), у вас будет выполнено 2 запроса. Из-за этого очень трудно избавиться от контекста данных.

Мой совет, верните конкретную коллекцию: например, ICollection<T> и привяжите к ней.

Если вам нужно сделать что-то вроде пейджинга, сделайте это через LINQ .Skip() и .Take().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...