Heim > Backend-Entwicklung > C++ > Wie kann die dynamische Linq dynamische Spaltenauswahl in C#aktivieren?

Wie kann die dynamische Linq dynamische Spaltenauswahl in C#aktivieren?

DDD
Freigeben: 2025-01-28 20:06:11
Original
831 Leute haben es durchsucht

How Can Dynamic LINQ Enable Dynamic Column Selection in C#?

c#Dynamic Linq: Erstellen Sie die dynamische Spaltenauswahl

Berücksichtigung der Datenklasse mit mehreren Feldern unten:

<code class="language-csharp">public class Data
{
    public string Field1 { get; set; }
    public string Field2 { get; set; }
    public string Field3 { get; set; }
    public string Field4 { get; set; }
    public string Field5 { get; set; }
}</code>
Nach dem Login kopieren
Angenommen, Sie möchten eine bestimmte Spalte aus der Liste der Datenobjekte dynamisch auswählen, z. B. nur Feld1 und Feld2. Während der Szene des ausgewählten Feldes und Sie müssen diese Felder zur Laufzeit angeben, und die Verwendung von Dynamic Linq ist eine effektive Methode.

Um dies dynamisch zu implementieren, können wir dynamisch einen Lambda -Ausdruck erstellen:

<code class="language-csharp">Func<Data, Data> CreateNewStatement(string fields)
{
    // 输入参数 "o"
    var xParameter = Expression.Parameter(typeof(Data), "o");

    // 新语句 "new Data()"
    var xNew = Expression.New(typeof(Data));

    // 创建初始化器
    var bindings = fields.Split(',').Select(o => o.Trim()).Select(o => {

        // 属性 "Field1"
        var mi = typeof(Data).GetProperty(o);

        // 原始值 "o.Field1"
        var xOriginal = Expression.Property(xParameter, mi);

        // 设置值 "Field1 = o.Field1"
        return Expression.Bind(mi, xOriginal);
    });

    // 初始化 "new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var xInit = Expression.MemberInit(xNew, bindings);

    // 表达式 "o => new Data { Field1 = o.Field1, Field2 = o.Field2 }"
    var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter);

    // 编译为 Func<Data, Data>
    return lambda.Compile();
}</code>
Nach dem Login kopieren
Diese Methode akzeptiert die Zeichenfolge des erforderlichen Feldnamens als Eingabe und gibt einen

lambda -Ausdruck zurück. Der Lambda -Expression erstellt dynamisch ein neues Datenobjekt mit einem bestimmten Feldwert, um diese Felder auszuwählen. Func<Data, Data>

Mit dieser Methode können wir aus der Datenliste wie folgt eine bestimmte Liste auswählen:

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
Nach dem Login kopieren
Selbst wenn Sie das ausgewählte Feld während der Zusammenstellung nicht kennen, kann dies auch dynamische und flexible Lösungen für die Auswahl von Spalten in der LINQ -Abfrage liefern.

Das obige ist der detaillierte Inhalt vonWie kann die dynamische Linq dynamische Spaltenauswahl in C#aktivieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage