Мои заявления Linq2Sql дают мне то, что я требовал. Ниже мой метод, возвращающий анонимный список категорий и всех связанных с ними подкатегорий:
public IQueryable GetAllCategoriesAndSubcategories()
{
return from p in _context.Categories
let relatedchilds = from c in _context.SubCategories
where c.CategoryId == p.Id
select c
select new
{
p,
relatedchilds
};
}
В своем коде я использую этот метод для получения категории и всех ее подкатегорий:
private void WriteCategories()
{
var repository = new CategoryRepository();
var dt = repository.GetAllCategoriesAndSubcategories();
var sb = new StringBuilder();
sb.AppendLine(" <div class='widget_box' id='category'>");
sb.AppendLine(" <div class='wintitle'>");
sb.AppendLine(" <div class='inner_wintitle'>Categories</div>");
sb.AppendLine(" </div>");
sb.AppendLine(" <div class='winbody'>");
sb.AppendLine(" <ul class='categories'>");
int i = 1;
foreach (Category category in dt.OfType<Category>())
{
sb.AppendLine(
string.Format("<li class='catetitle' id='catetitle{0}'><a href='/category/{1}/{2}'>{3}</a></li>", i,
category.Id, Common.ReplaceUnwantedChars(category.Name), category.Name));
sb.AppendLine("<li style='display:none;' class='category_sub' ><div><ul>");
foreach (var subCategory in dt.OfType<SubCategory>())
{
sb.AppendLine(string.Format("<li><a href='category/{0}/{1}/{2}'>{3}</a></li>", category.Id,
subCategory.Id, Common.ReplaceUnwantedChars(subCategory.Name),
subCategory.Name));
}
i++;
}
sb.AppendLine("</div></ul></div>");
ltlCategories.Text = sb.ToString();
}
Добавив часы, я получил материал, приведенный ниже:
[0] { p = {InnovativeTechnosoft.BusinessBazaar.Web.UI.Core.Category}, relatedchilds = {System.Collections.Generic.List`1[InnovativeTechnosoft.BusinessBazaar.Web.UI.Core.SubCategory]} } <Anonymous Type>
Требование: Из самого кода ясно, что мне нужно перебрать категорию и ее подкатегорию. У меня проблема и проверка состояния, где я использую dt.OfType<Category>()
Если я просто использую foreach(Category c in dt)
, это дает мне исключение при касте.
Пожалуйста, помогите. Где и что я делаю не так.