Я использую Entity Framework 4.1 code first
.
Вот мой Category
класс:
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
public int? ParentCategoryId { get; set; }
public virtual Category ParentCategory { get; set; }
public virtual ICollection<Category> ChildCategories { get; set; }
}
Приведенный выше класс является категорией с самообращением, например, родительская категория можетУ меня есть список дочерних категорий.
Я хочу создать строковое значение имени родительской категории и имени дочерней категории, например, Parent Category 1 > Child Category 1-1
.
Итак, я получаю списоквсе родительские категории, цикл по каждой родительской категории.И для каждой родительской категории я хочу пройтись по списку дочерних категорий и объединить имя каждой дочерней категории с именем родительской категории, чтобы у меня было что-то вроде:
Animal > Lion
Anumal > Baboon
Anumal > Zebra
etc etc etc...
Вот мой код зацикливания.Если кто-нибудь может помочь мне сократить количество строк кода, то я был бы признателен:)
public IEnumerable<Category> GetParentChildCategories()
{
IEnumerable<Category> parentCategoryList = GetParentCategories()
.Where(x => x.IsActive);
List<Category> parentChildCategoryList = new List<Category>();
foreach (Category parentCategory in parentCategoryList)
{
foreach (Category childCategory in parentCategory.ChildCategories)
{
if (childCategory.IsActive)
{
Category category = new Category
{
Id = childCategory.Id,
Name = parentCategory.Name + " > " + childCategory.Name
};
parentChildCategoryList.Add(category);
}
}
}
return parentChildCategoryList;
}
Он взрывается во 2-м элементе foreach, когда хочет пройти по дочерним категориям.Почему это?Вот ошибка:
Уже есть открытый DataReader, связанный с этой командой, который должен быть закрыт первым.