【发布时间】:2014-12-09 13:00:40
【问题描述】:
我有一个自引用的Category 类,如果它在集合中至少有一个子类别并且至少有 1 个或多个活动 (ICollection<Activity>),我想从中检索父类别和所有对应的子类别。
这也适用于孩子的孩子,因为只有当孩子类别至少有 1 个或更多活动时才应返回这些。
如果没有包含至少 1 个或多个活动的子类别,则应不返回父或子 Category。
查询应该将父 Category 作为实际的 Category 对象返回,而不仅仅是 CategoryId。这可能吗?
public class Category
{
public int CategoryId { get; set; }
public string Name { get; set; }
public int? ParentId { get; set; }
public virtual Category Parent { get; set; }
public virtual ICollection<Category> Children { get; set; }
public virtual ICollection<Activity> Activities { get; set; }
}
更新 1
部分有效的查询:
var categories = _db.Categories
.Where(x => x.Parent != null && x.Activities.Count > 0)
.GroupBy(x => x.ParentId)
.Select(g => new { Parent = g.Key, Children = g.ToList() }).ToList();
【问题讨论】:
-
您尝试过的查询在哪里?
-
您存储
ParentId的任何特殊原因?你不会从Parent.CategoryId那里得到这个吗? -
@RufusL 这在 EF 中很典型,因此您可以将一行作为一个实体拉出,而无需实际拉出引用的实体。你得到链接到父对象的 id,但不是父对象。
-
对于给定的实例,父母说,4 个孩子,只有 1 个满足条件。选择父母是否意味着将自动选择所有孩子?
-
@P.K.你怎么知道可能的许多子孩子中的一个满足条件?如果是这样,你怎么知道只有父母回来的?您有示例 linq 查询吗?
标签: c# sql linq entity-framework