代码之家  ›  专栏  ›  技术社区  ›  Jake Wharton

在上下文中迭代表以及这些表的属性

  •  2
  • Jake Wharton  · 技术社区  · 14 年前

    我迭代上下文中的表,然后遍历这些表的属性,以急切地加载上下文中的所有列。我通过另一个问题得到了一些帮助,但我似乎无法理解如何迭代实际表的列属性。


    public static void DisableLazyLoading(this DataContext context)
    {
        DataLoadOptions options = new DataLoadOptions();
    
        var contextTables = context.GetType().GetProperties().Where(n => n.PropertyType.Name == "Table`1");
        foreach (var contextTable in contextTables)
        {
            var tableType = contextTable.GetValue(context, null).GetType().GetGenericArguments()[0];
            var tableProperties = tableType.GetProperties().Where(n => n.PropertyType.Name != "EntitySet`1");
            foreach (var tableProperty in tableProperties)
            {
                ParameterExpression paramExp = Expression.Parameter(tableType, "s");
                Expression expr = Expression.Property(paramExp, tableProperty.Name);
                options.LoadWith(Expression.Lambda(expr, paramExp));
            }
        }
    
        context.LoadOptions = options;
    }
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   djdd87    14 年前

    ProperInfo 这个 PropertyInfo 学生:

    var tablePropertInfos = context.GetType().GetProperties().Where(
        n => n.PropertyType.Name == "Table`1");
    
    foreach (var tablePropertyInfo in tablePropertInfos)
    {
    
        // Get the actual table
        var table = tablePropertyInfo.GetValue(context, null);
    
        // Do the same for the actual table properties
    
    }
    

    物业信息 类,您需要使用 GetValue