【发布时间】:2015-05-25 12:28:25
【问题描述】:
我正在处理以下查询:
public void FindAllRelatedProdsByParentCat(CategoryService categoryService, string parentCatName, bool isDeleted)
{
List<Category> allCats = categoryService.FindAll(isDeleted).ToList();
var results = (from a in allCats.Where(x => x.Name == parentCatName)
join b in allCats
on a.CategoryId equals b.Parentcategory into children
select new
{
ParentId = a.CategoryId,
ChildrenIds = children.Select(z => z.CategoryId)
}).ToList();
}
理想情况下,我想要将 select new 语句展平为 Id 对象的通用类型列表。目前我必须用两个属性组成一个匿名对象来获得我想要的东西。有人可以帮我将其重构为一个平面列表吗?这可行吗?
更新:类别实体是什么样的:
public class Category : EntityBase
{
public Category()
{
Products = new List<Product>();
}
public Guid CategoryId { get; set; }
public string Name { get; set; }
public Guid? Parentcategory { get; set; }
public bool IsDeleted { get; set; }
public Guid OrgId { get; set; }
public virtual List<Product> Products { get; set; }
public virtual Organization Organization { get; set; }
}
【问题讨论】:
-
您想要一个包含
ParentId和ChildrenIds的列表? -
是的,这正是我想要的。只是不知道如何重构它。
-
allCats是什么类型?为什么在同一个可枚举对象上有一个Join? -
你能添加你的
Category类型声明吗? -
@IbrarMumtaz 我不明白你想要获得什么...你想要一个
List<int>与所有parent.CategoryId和child.CategoryId一起吗?
标签: c# linq refactoring