2013-08-16 2 views
-1

Я получаю исключение с исключительным исключением, когда я фильтрую EF, но я абсолютно бессвязно.как отладить EF 5 null исключение ссылки?

enter image description here

public IEnumerable<TonalityBatchModel> GetTonalityBatch(int briefID) 
{ 
    try 
    { 
     var brief = NeptuneUnitOfWork.Briefs.FindWhere(b => b.ID == briefID).FirstOrDefault(); 

     if (brief != null && brief.TonalityCriteria != null) 
        { 
         return brief.TonalityCriteria.TonalityBatches 
            .Select(b => new TonalityBatchModel() 
             { 
              BriefID = b.BriefID, 
              Status = b.TonalityCriteria.IsActive == true ?"Active":"Ended", 
              BatchID = b.ID, 
              CompetitorID = b.BriefCompetitorID, 
              Competitor = brief.BriefCompetitors.Where(i=>i.ID == b.BriefCompetitorID).Select(c=>c.Organisation.Name).First(), 
              Size = b.BatchSize, 
              StartDate = b.StartDate, 
              EndDate = b.EndDate, 
              IsPublished = b.Lookup_TonalityBatchStatus.ID == (int)TonalityBatchStatus.Published?"Yes":"No", 
              IsCompleted = b.Lookup_TonalityBatchStatus.ID == (int)TonalityBatchStatus.Completed ? "Yes" : "No", 
              IsAssigned = b.Lookup_TonalityBatchStatus.ID == (int)TonalityBatchStatus.Allocated ? "Yes" : "No", 
              ImportantCount = b.TonalityItems.Count(i=> i.IsImportant), 
              ArticlesCount = b.TonalityItems.Count, 
              FavourableCount = b.TonalityItems.Count(i => i.Lookup_TonalityScoreTypes.ID ==(int)TonalitySourceType.Favourable), 
              UnfavourableCount = b.TonalityItems.Count(i => i.Lookup_TonalityScoreTypes.ID ==(int)TonalitySourceType.Unfavourable), 
              NeutralCount = b.TonalityItems.Count(i => i.Lookup_TonalityScoreTypes.ID ==(int)TonalitySourceType.Neutral) 

             }).ToList(); 
        } 

        return new List<TonalityBatchModel>(); 

      } 
      catch (Exception ex) 
      { 
       Logger.Error(ex); 
       throw; 
      } 
     } 
+0

Не очень хороший вопрос. Сначала вы хотите отладить библиотеку Linq, а не структуру сущности. Во-вторых - вам просто нужно выяснить, что в этом случае пусто. Это проще понять без отладки сущности или системной библиотеки. – Jarekczek

ответ

1

Вы должны уменьшить свой запрос к более простому запросу, а затем начать строить его обратно вверх снова, пока NullReferenceException не происходит. Глядя на ваш код, вот некоторые вероятные места (я сделать некоторые предположения, так как я не знаю все о вашей модели):

Competitor = brief.BriefCompetitors.Where(i=>i.ID == b.BriefCompetitorID).Select(c=>c.Organisation.Name).First() 

BriefCompetitors может быть пустым. c.Organisation может быть пустым.

IsPublished = b.Lookup_TonalityBatchStatus.ID == (int)TonalityBatchStatus.Published?"Yes":"No", 

(и другие подобные линии) b.Lookup_TonalityBatchStatus может быть нулевым.

ImportantCount = b.TonalityItems.Count(i=> i.IsImportant), 

(и другие подобные строки) b.TonalityItems может быть пустым.

0

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

INNER JOIN TonalityItems i on i.Lookup_TonalityScoreTypes == x 

Где x это значение (int)TonalitySourceType.Favourable. Поскольку это соединение не имеет соответствующих результатов, не нужно делать count. Вы можете попробовать добавить ?? 0 в конце запроса:

FavourableCount = b.TonalityItems.Count(i => i.Lookup_TonalityScoreTypes.ID ==(int)TonalitySourceType.Favourable) ?? 0, 
+0

Count() на пустом множестве вернет 0, а не null, а не исключение. Однако, если вы вызываете что-то строку 'a.b.SomeSet.Count()', а 'a.b.SomeSet' равно null, вы получите исключение NullReferenceException. – Steve

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