2012-01-15 2 views
0

Следующий код работает хорошоЕсть ли разница между db.Categories и Список <Category>

IEnumerable<GroupedSelectListItem> groupList = db.Categories.Select(p => new GroupedSelectListItem() 
{ 
    GroupKey = p.ParentCategory.Name, 
    GroupName = p.ParentCategory.Name, 
    Text = p.Name, 
    Value = p.Name 
}); 

Хотя приведенный ниже код генерирует ссылка на объект не указывает на ошибки экземпляра

List<Category> orderedList = new List<Category>(); 
var rootList = db.Categories.Where(c => c.ParentCategoryId == null).ToList(); 
    foreach (var item in rootList) 
    { 
     orderedList.Add(item); 
     if (item.SubCategories.Count != 0) 
     { 
      foreach (var subcat in item.SubCategories) 
      { 
       orderedList.Add(subcat); 
       if (subcat.SubCategories.Count != 0) 
       { 
        foreach (var subsubcat in subcat.SubCategories) 
        { 
         orderedList.Add(subsubcat); 
        } 
       } 
      } 
     } 
    } 
IEnumerable<GroupedSelectListItem> groupList = orderedList.Select(p => new GroupedSelectListItem() 
{ 
    GroupKey = p.ParentCategory.Name, 
    GroupName = p.ParentCategory.Name, 
    Text = p.Name, 
    Value = p.Name 
}); 

Ошибка Деталь

Линия 54: IEnumerable = orderedList.Select списка группы (р => нового GroupedSelectListItem()

Примечания: таблица для категорий в базе данных содержит элемент с ParentCategoryId для некоторых записей, равного нуль

+0

насчет показывая, где именно вы получите нулевое ссылочное исключение ... –

+0

@LadislavMrnka, жаль я не очень хорошо разбираюсь в отладке и трассировке, но я добавил красную строку текста, показанного с сообщением об ошибке в браузере –

ответ

2

первого фрагмент кода использует Linq-to-entity с автоматическим слиянием. Это означает, что если p не имеет ParentCategory, он будет работать без проблем на уровне SQL. Второй пример использует Linq-to-objects, где такая функция отсутствует. Вы должны вручную проверить, если ParentCategory свойства заполняются до обращения к его Properites:

GroupKey = p.ParentCategory != null ? p.ParentCategory.Name : null 
+0

решенным помощником .... спасибо, что так много –

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