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

时间:2010-08-03 12:28:19

标签: linq linq-to-sql datacontext

我正在迭代上下文的表,然后这些表的属性急切加载上下文中的所有列。我通过另一个问题收到了一些帮助,但我似乎无法弄清楚如何迭代实际表的列属性。


最终工作代码:

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 个答案:

答案 0 :(得分:1)

你只得到ProperInfo。您需要从PropertyInfo s

获取值
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

}

获得PropertyInfo课程后,您需要使用GetValue方法获取该值。