Heim >Backend-Entwicklung >C++ >Wie kann ich Spalten in LINQ -Abfragen dynamisch auswählen?

Wie kann ich Spalten in LINQ -Abfragen dynamisch auswählen?

Susan Sarandon
Susan SarandonOriginal
2025-01-28 19:56:10984Durchsuche

How Can I Dynamically Select Columns in LINQ Queries?

dynamische Spalten in der LINQ -Selection

Wenn die Liste unbekannt ist, kann die spezifische Spalte in der LINQ -Abfrage eine Herausforderung sein. Es gibt jedoch eine Lösung, bei der der an die Auswahl übergebene Lambda -Ausdruck beteiligt ist.

Betrachten Sie die folgende Datenklasse:

Um eine bestimmte Spalte dynamisch auszuwählen, können Sie die Methode für die CreateNewStatement verwenden, um dynamisch Lambda -Ausdrücke zu erstellen:
<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>

Diese Methode verwendet die Liste des Kommas, um die Liste als Zeichenfolge zu trennen, und generiert dynamisch einen Lambda -Ausdruck.
<code class="language-csharp">private Func<Data, Data> CreateNewStatement(string fields)
{
    var xParameter = Expression.Parameter(typeof(Data), "o");
    var xNew = Expression.New(typeof(Data));

    var bindings = fields.Split(',')
        .Select(o => o.Trim())
        .Select(o =>
        {
            var mi = typeof(Data).GetProperty(o);
            var xOriginal = Expression.Property(xParameter, mi);
            return Expression.Bind(mi, xOriginal);
        });

    var xInit = Expression.MemberInit(xNew, bindings);
    var lambda = Expression.Lambda<Func<Data, Data>>(xInit, xParameter);
    return lambda.Compile();
}</code>

Dann können Sie mit der Methode für die CreateNewStatement Lambda -Ausdrücke erstellen und sie verabschieden, um:

auszuwählen:

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
Dies gibt eine Sequenz mit einem Datenobjekt zurück, das in einem angegebenen Feld gefüllt ist. Bitte beachten Sie, dass diese Technologie beim Kompilieren für das unbekannte Bereich geeignet ist. Wenn das ausgewählte Feld statisch ist, ist die herkömmliche Lambda -Expression oder Reflex -basierte Methode effizienter.

Das obige ist der detaillierte Inhalt vonWie kann ich Spalten in LINQ -Abfragen dynamisch auswählen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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