从理论上讲,您可以创建一个方法,该方法根据指定的深度级别动态构建查询表达式:
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(); }}
但是,大概这会创建一堆联接表达式,因此这可能不是最佳方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)