我正在使用Entity Framework 4.1 code first
。如何通過實體框架中的對象的子對象循環4.1代碼優先
這裏是我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;
}
它彈出在第二的foreach。這是爲什麼?這裏是錯誤:
已經有一個打開的DataReader與這個Command關聯,它必須先關閉。
這裏解釋了它爲什麼會拋出異常:http://stackoverflow.com/questions/4867602/entity-framework-there-is-already-an-open-datareader-associated-with-this-comman/4868569#4868569 –