首頁 > 後端開發 > C++ > 如何在LINQ查詢中動態選擇列?

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

Susan Sarandon
發布: 2025-01-28 19:56:10
原創
982 人瀏覽過

How Can I Dynamically Select Columns in LINQ Queries?

LINQ中的動態列選擇

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

考慮以下Data類:

<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>
登入後複製

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

<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>
登入後複製

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

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

<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
登入後複製

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

以上是如何在LINQ查詢中動態選擇列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板