使用EF Core计算儿童数量

时间:2017-11-12 12:41:30

标签: c# entity-framework ef-core-2.0

这些是我的实体:

public class Model {
    public int Id { get; set; }
    public string Name { get; set; }
    [NotMapped] // EDIT: Forgot to add this in my sample code.
    public bool HasChildren { get; set; }
    public ICollection<ChildModel> Children { get; set; }
}

public class ChildModel {
    public int Id { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
}

现在我要做的是,如果存在与模型相关的ChildModels,则拉出所有Model对象并将其HasChildren属性设置为true。这就是我现在的做法:

context.Models.Select(s => new Model {
    Id = s.Id,
    Name = s.Name,
    HasChildren = s.Children.Count() > 0
});

当我将结果投影到具有相同类型的实体(模型)的集合中时,某种感觉就像某种东西一样。

我还检查了生成的查询。数据是在一个查询中提取的,这很好,但我想知道是否有更好的方法用C#做到这一点?

2 个答案:

答案 0 :(得分:3)

您可以使用Any代替计数

context.Models.Select(s => new Model {
    Id = s.Id,
    Name = s.Name,
    HasChildren = s.Children.Any()
});

答案 1 :(得分:-1)

尝试使用此模型定义:

public class Model {
    public int Id { get; set; }
    public string Name { get; set; }
    [NotMapped]
    public bool HasChildren => this.Children != null && this.Children.Count > 0;
    public ICollection<ChildModel> Children { get; set; }
}

如果你不能使用C#6功能,那么:

public bool HasChildren { get { return this.Children != null && this.Children.Count > 0; } }
EF Linq:

context.Models.Include(x => x.Children).ToList();