实体框架..自引用表..获取深度= x的记录?

实体框架..自引用表..获取深度= x的记录?,第1张

实体框架..自引用表..获取深度= x的记录?

从理论上讲,您可以创建一个方法,该方法根据指定的深度级别动态构建查询表达式

context.FamilyLabels.Where(x =>     x.Parent. ... .Parent != null &&    x.Parent.Parent ... .Parent == null);

以下实现可以达到目的:

public static IList<FamilyLabel> Get(DbConnection connection, int depth){    var p = expression.Parameter(typeof(FamilyLabel));    expression current = p;    for (int i = 0; i < deep; i++)    {        current = expression.Property(current, "Parent");    }    var nullConst = expression.Constant(null, typeof(FamilyLabel));    var predicate = expression.Lambda<Func<FamilyLabel, bool>>(        expression.AndAlso( expression.NotEqual(current, nullConst), expression.Equal(expression.Property(current, "Parent"), nullConst)), p);    using (MyDbContext context = new MyDbContext(connection))    {        return context.FamilyLabels.Where(predicate).ToList();    }}

但是,大概这会创建一堆联接表达式,因此这可能不是最佳方法。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5675205.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存