2010-11-25 4 views
2

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

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

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

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

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

Спасибо за любой намек.

+1

Если люди не отвечают на мой вопрос правильно, почему я должен лгать, что его ответ? – gruber 2010-11-26 09:20:17

ответ

4

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

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

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

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

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

Смежные вопросы