У меня есть две модели: Category и ExternalResources:
Category
public partial class Category
{
public long CategoryID { get; set; }
public string Name { get; set; }
public Nullable<long> ParentCategoryID { get; set; }
public virtual ICollection<Category> Subcategories { get; set; }
public virtual Category ParentCategory { get; set; }
public virtual ICollection<ExternalResource> ExternalResources { get; set; }
}
ExternalResources
public partial class ExternalResource
{
public string DisplayText { get; set; }
public string URL { get; set; }
public long CategoryID { get; set; }
public int ExternalResourceID { get; set; }
public bool SupportItem { get; set; }
public bool IsInActivity { get; set; }
public virtual Category Category { get; set; }
}
Переменная с именем IsInActivity - это та, которую я использую, чтобы узнать, показывать ли ее в списке или нет.
Я хочу показать список с родителями и только их детьми, у которых есть переменная IsInActivity установлено на true
Я создал функцию, которая возвращает родителей, в которых есть хотя бы 1 дочерний элемент, значение которого равно true, но я хочу, чтобы оно было тольковозвращает потомков с IsInActivity в true.
public List<Category> ContainsResources(List<Category> qry)
{
List<Category> lstResourceIsInActivity = qry.Where(p => p.ExternalResources.Any(c => c.IsInActivity = true)).ToList();
return lstResourceIsInActivity;
}
Есть ли способ сделать это с Linq?.
[ОБНОВЛЕНО]
Я уже разрешил предыдущее сомнение, возникло еще одно сомнение, в этом случае он возвращает подкатегории, но не родительские категории, если у него есть подкатегория (родительская) с выбранным дочерним элементом.
Я сделал эту функцию, но она возвращает то, что яупомянуто выше:
public List<Category> ContainsResources(List<Category> qry)
{
List<Category> lstResourceIsInActivity = qry.Where(c => c.ExternalResources.Any(r => r.IsInActivity)).Select(c => new Category
{
CategoryID = c.CategoryID,
Name = c.Name,
ParentCategoryID = c.ParentCategoryID,
Subcategories = c.Subcategories.Where(b => b.ExternalResources.Any(r => r.IsInActivity) && b.ParentCategoryID != null).Select(b => new Category
{
CategoryID = b.CategoryID,
Name = b.Name,
ParentCategoryID = b.ParentCategoryID,
ExternalResources = b.ExternalResources.Where(r => r.IsInActivity).ToList()
}).ToList(),
ParentCategory = c.ParentCategory,
ExternalResources = c.ExternalResources.Where(r => r.IsInActivity).ToList()
})
.ToList();
return lstResourceIsInActivity;
}
Какрешить эту проблему с LinQ?