Linq To Entities Запрос странности - PullRequest
2 голосов
/ 19 июня 2009

Я получаю исключение из-за того, что Linq для сущностей не поддерживает определенные выражения запроса, такие как:

MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == Int32.Parse(brandIdString))

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

Ответы [ 4 ]

6 голосов
/ 19 июня 2009

Лучший вариант (по крайней мере, для приведенного вами примера) - извлечь операцию из оператора LINQ:

Int32 brandId = Int32.Parse(brandIdString)
MyDataContext db = new MyDataContext()
Brand = db.Brands.First(b => b.BrandId == brandId )

Пояснение:

Когда вы используете LINQ, он хочет найти способы перегрузить большую часть работы на запрос базы данных. Чтобы сделать это, он фактически создает дерево выражений для всех вещей, которые вы говорите ему делать в различных лямбда-выражениях. Затем, когда вы хотите выполнить запрос, он решает, какой оператор SQL будет лучше всего выполнять то, о чем вы его просили. Это позволяет ему сделать очень необычную оптимизацию. Однако, если он не знает, как преобразовать что-либо в оператор SQL, он разозлится на вас, когда вы попытаетесь выполнить запрос.

0 голосов
/ 19 июня 2009

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

0 голосов
/ 19 июня 2009

Вы можете использовать это?

MyDataContext db = new MyDataContext();
Brand b = db.Brands.Where(b => b.BrandId == Int32.Parse(brandIdString)).First();

Альтернативное решение (без использования Lambdas ...):

MyDataContext db = new MyDataContext();

Brand b = (from Brand b in db.Brands
           where b.BrandId == Int32.Parse(brandIdString)
           select b).First();

(Кроме того, вам не хватает ; в конце каждой строки кода, и вы не указали имя переменной для того, что вы получаете из запроса, но я предполагаю, что это опечатки только здесь ...)

0 голосов
/ 19 июня 2009

Да. Это отстой. Я считаю, что вы должны выполнить синтаксический анализ или нормализацию данных вне запроса ... затем передать результаты. Я столкнулся с этим при попытке сделать некоторое форматирование даты в границах запроса. В итоге я переместил его из запроса в строковую переменную, а затем передал переменную с уже примененным правильным форматированием.

LAME - Entity Framework еще предстоит пройти долгий путь!

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