Есть ли разница между db.Categories и List <Category> - PullRequest
0 голосов
/ 15 января 2012

Следующий код работает хорошо

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 groupList = orderList.Select (p => new GroupedSelectListItem ()

ПРИМЕЧАНИЕ: Таблица для категорий в базе данных содержит элемент с ParentCategoryId для некоторых записей, равных нулю

1 Ответ

2 голосов
/ 15 января 2012

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

GroupKey = p.ParentCategory != null ? p.ParentCategory.Name : null 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...