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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Entity Framework: не работает Include() 
V
    Опции темы
Dblma
Дата 10.6.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день.
Возможно, не в тот раздел, если что - прошу прощения

Есть код:
Код

List<ShortListLine> result = new List<ShortListLine>();
List<ExtDocs> temp = new List<ExtDocs>();
foreach (DataBase dataBase in _dataBases.Values)
{
    temp.AddRange(
        from document in dataBase.ExtDocsSet.Include("Pi")
        from personReport in dataBase.PersonReportSet 
        where document.Pi != null &&
              document.Pi.Name == personReport.Name && 
              document.Pi.Year == personReport.Year &&
              personReport.Check
        &&    (document.DocDate > fromDate && document.DocDate < toDate )
        select document);
}
result.AddRange((
    from doc in temp
    group doc by doc.Pi.Name
    into g
    select new ShortListLine
    {
        Name = g.Key,
        Total = g.Count(),
        TotalControlled = g.Count(x => x.VidContr != null),
        Executed = g.Count(x => x.IspDate.HasValue && x.CntDate.HasValue && x.IspDate < x.CntDate),
        ExecutedOutOfTime = g.Count(x => x.CntDate.HasValue && (!x.IspDate.HasValue || x.IspDate > x.CntDate))
        NotExecuted = g.Count( x=>!x.IspDate.HasValue && x.CntDate > DateTime.Now),
        NotExecutedOutOfTime = g.Count(x => x.VidContr != null && !x.IspDate.HasValue)
    }).OrderBy(x=>x.Name, StringComparer.CurrentCultureIgnoreCase));
return result;

Так вот, этот код валится на строчке group doc by doc.Pi.Name с NullPointerException, т.е. при Include("Pi") не загружаются записи из таблиwы Pi.

Такой вот код прекрасно работает:
Код

List<ShortListLine> result = new List<ShortListLine>();
List<ExtDocs> temp = new List<ExtDocs>();
foreach (DataBase dataBase in _dataBases.Values)
{
    temp.AddRange(
        from document in dataBase.ExtDocsSet.Include("Pi")
        from personReport in dataBase.PersonReportSet 
        where document.Pi != null &&
              document.Pi.Name == personReport.Name && 
              document.Pi.Year == personReport.Year &&
              personReport.Check
        &&    (document.DocDate > fromDate && document.DocDate < toDate )
        select document);
    foreach (var list in temp)
    {
        if(!list.PiReference.IsLoaded) list.PiReference.Load();
    }
}
result.AddRange((
    from doc in temp
    group doc by doc.Pi.Name
    into g
    select new ShortListLine
    {
        Name = g.Key,
        Total = g.Count(),
        TotalControlled = g.Count(x => x.VidContr != null),
        Executed = g.Count(x => x.IspDate.HasValue && x.CntDate.HasValue && x.IspDate < x.CntDate),
        ExecutedOutOfTime = g.Count(x => x.CntDate.HasValue && (!x.IspDate.HasValue || x.IspDate > x.CntDate))
        NotExecuted = g.Count( x=>!x.IspDate.HasValue && x.CntDate > DateTime.Now),
        NotExecutedOutOfTime = g.Count(x => x.VidContr != null && !x.IspDate.HasValue)
    }).OrderBy(x=>x.Name, StringComparer.CurrentCultureIgnoreCase));
return result;

Не подскажите, почему не работает Include() в первом случае?
PM MAIL ICQ   Вверх
Idsa
Дата 10.6.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Нужно заменить запрос:
Код

        from document in dataBase.ExtDocsSet.Include("Pi")
        from personReport in dataBase.PersonReportSet 
        where document.Pi != null &&
              document.Pi.Name == personReport.Name && 
              document.Pi.Year == personReport.Year &&
              personReport.Check
        &&    (document.DocDate > fromDate && document.DocDate < toDate )
        select document);

на
Код

        ((ObjectQuery<Document>)from document in dataBase.ExtDocsSet
        from personReport in dataBase.PersonReportSet 
        where document.Pi != null &&
              document.Pi.Name == personReport.Name && 
              document.Pi.Year == personReport.Year &&
              personReport.Check
        &&    (document.DocDate > fromDate && document.DocDate < toDate )
        select document)).Include("Pi");

То есть переносим Include("Pi") в конец запроса (правда, для этого нужно привести тип).


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Dblma
Дата 11.6.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, помогло. Правда не совсем понимаю причину сего явления. Проблема в 2-х from?

Это сообщение отредактировал(а) Dblma - 11.6.2009, 10:41
PM MAIL ICQ   Вверх
Idsa
Дата 11.6.2009, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Dblma @  11.6.2009,  14:29 Найти цитируемый пост)
Правда не совсем понимаю причину сего явления. Проблема в 2-х from?

Да, в них.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




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


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

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