LLBLGEN: Linq для LLBGEN не работают - PullRequest
0 голосов
/ 08 марта 2010

Я хочу сделать выбор из таблицы базы данных, используя Linq. Мы используем LLBGEN в качестве решения ORM.

Я не могу выполнить LINQ-запрос к классу Entity Collection, если не вызову его метод GetMulti (null).

Можно ли выполнить LINQ-запрос к LLBGEN без предварительного извлечения всей таблицы?

BatchCollection batches = new BatchCollection();                
BatchEntity batch = batches.AsQueryable()
.Where(i => i.RegisterID == 3)
.FirstOrDefault(); // Exception: Sequence don't contains any elements

batches = new BatchCollection();                
batches.GetMulti(null); // I don't want to extract the whole table.
BatchEntity batch = batches.AsQueryable()
.Where(i => i.RegisterID == 3)
.FirstOrDefault(); //Works fine

1 Ответ

4 голосов
/ 08 марта 2010

Чтобы выполнить запрос к базе данных с помощью LINQ (что отличается от работы с перечислимой коллекцией с использованием синтаксиса LINQ), вы должны использовать поставщика LinqMetaData, который поставляется с LLBLGen в сборке yourrootnamespace.Linq. Как только вы добавите эту сборку в свой проект, вы можете использовать что-то вроде этого для создания вашего запроса к базе данных: (из документации LLBL)

LinqMetaData metaData = new LinqMetaData();
var q = from c in metaData.Customer
        where c.Country=="USA"
        select c;

В приведенном выше примере вы используете синтаксис LINQ для выполнения предложения where для коллекции, но это не имеет никакого отношения к LLBL или выполнению запроса к базе данных. Вот почему он не будет работать с пустой коллекцией, но работает с заполненной коллекцией.

Подробнее о LinqMetaData можно узнать о специфике запроса вашей базы данных с использованием LINQ to LLBLGen.

...