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

发布于 2024-09-12 19:23:10 字数 960 浏览 3 评论 0原文

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


最终工作代码:

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;
}

I'm iterating the tables of a context and then the properties of those tables to eager load all columns in a context. I received some help via another question, but I don't seem to be able to figure out how to iterate the column properties of the actual table.


Final working code:

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;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星光不落少年眉 2024-09-19 19:23:10

您仅获得 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

}

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

You're only getting the ProperInfos. You need to get the values from the PropertyInfos:

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

}

Once you have the PropertyInfo class, you need to get the value using the GetValue method.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文