Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемма с DefaultIfEmpty() 
V
    Опции темы
KelTron
Дата 19.6.2009, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 2
Всего: 38



Кажется я понял.

Т.к. внешний запрос отложенный => пока ты не начнёшь перечислять коллекцию он не выполнится и значит 
в поле a.MaterialID будет null.

Вложенный запрос же НЕ отложенный и выполняется немедленно, но в это время ещё нет данных об a.MaterialID.
Поэтому генерится эксепшин.

По этой же причине работает вариант с foreach.

Самое простое что приходит в голову для исправления ситуации:
Код

var result = (from a in query
                   select new
                   {
                         MaterialId = a.MaterialID,
                         Quantity = a.Quantity - dataContext.GetTable<Stock>()
                             .Where(n => n.MaterialID == a.MaterialID).Select(n => .Quantity)
                             .SingleOrDefault()
                   }).ToList();




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
BooteR
Дата 19.6.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.1.2008
Где: Kyiv

Репутация: нет
Всего: нет



KelTron, мне результат запроса нужно вывести в DataGridView. Решение с ToList(), как я понимаю, будет проблематично
PM MAIL   Вверх
KelTron
Дата 19.6.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 745
Регистрация: 8.10.2006
Где: Красноярск

Репутация: 2
Всего: 38



BooteR, не заметил твоего предыдущего сообщения.

Хм, что то странное, если у тебя n.Quantity это целое не нулевое число, то каким образом там получается null...

Цитата(BooteR @  19.6.2009,  15:27 Найти цитируемый пост)
Некрасиво, но работает. 


Для этого случая как раз и подходит оператор ??

Предыдущий твой код можно написать так:
Код

dataContext.GetTable<Stock>().Where(n => n.MaterialID == a.MaterialID).Select(n => n.Quantity).FirstOrDefault() ?? 0


Что я и предлагал в самом начале... 

Цитата(BooteR @  19.6.2009,  15:27 Найти цитируемый пост)
А вообще странно как то...

Действительно




--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
BooteR
Дата 20.6.2009, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.1.2008
Где: Kyiv

Репутация: нет
Всего: нет



KelTron, с оператором ?? я пробовал, но выдает ошибку:

Operator '??' cannot be applied to operands of type 'int' and 'int'
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.