」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在LINQ查詢中動態選擇列?

如何在LINQ查詢中動態選擇列?

發佈於2025-02-26
瀏覽:377

How Can I Dynamically Select Columns in LINQ Queries?

LINQ中的動態列選擇

當列在編譯時未知時,動態選擇LINQ查詢中的特定列可能具有挑戰性。但是,有一種解決方案涉及動態創建傳遞給Select的lambda表達式。

考慮以下Data類:

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

為了動態選擇特定列,您可以使用CreateNewStatement方法動態創建lambda表達式:

private Func 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>(xInit, xParameter);
    return lambda.Compile();
}

此方法將逗號分隔的字段列表作為字符串,並動態生成一個lambda表達式,該表達式使用指定的字段初始化一個新的Data對象。

然後,您可以使用CreateNewStatement方法創建lambda表達式並將其傳遞給Select:

var result = list.Select(CreateNewStatement("Field1, Field2"));

這將返回一個具有指定字段填充的Data對象的序列。請注意,此技術適用於在編譯時未知所選字段的情況。如果所選字段是靜態的,則使用常規lambda表達式或基於反射的方法效率更高。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3