2 Stimmen

Iterierende Tabellen in einem Kontext und die Eigenschaften dieser Tabellen

Ich iteriere die Tabellen eines Kontexts und dann die Eigenschaften dieser Tabellen, um alle Spalten in einem Kontext eifrig zu laden. Ich erhielt einige Hilfe über eine andere Frage, aber ich scheine nicht in der Lage zu sein, herauszufinden, wie die Spalte Eigenschaften der eigentlichen Tabelle zu iterieren.


Endgültiger Arbeitscode:

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

1voto

djdd87 Punkte 65008

Sie erhalten nur die ProperInfo s. Sie müssen die Werte erhalten von die 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

}

Sobald Sie die PropertyInfo Klasse, müssen Sie den Wert mit der Methode GetValue Methode.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X