Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh memilih lajur secara dinamik dalam pertanyaan Linq?

Bagaimanakah saya boleh memilih lajur secara dinamik dalam pertanyaan Linq?

Susan Sarandon
Lepaskan: 2025-01-28 19:56:10
asal
982 orang telah melayarinya

How Can I Dynamically Select Columns in LINQ Queries?

lajur dinamik dalam pemilihan linq

Apabila senarai tidak diketahui, lajur khusus dalam pertanyaan Linq mungkin mencabar. Walau bagaimanapun, terdapat penyelesaian yang melibatkan ekspresi lambda yang diluluskan untuk dipilih.

Pertimbangkan kelas data berikut:

Untuk secara dinamik memilih lajur tertentu, anda boleh menggunakan kaedah CreatEnewStatement untuk membuat ekspresi Lambda secara dinamik:
<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>
Salin selepas log masuk

Kaedah ini menggunakan senarai koma untuk memisahkan senarai sebagai rentetan, dan secara dinamik menghasilkan ungkapan 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>
Salin selepas log masuk

maka anda boleh menggunakan kaedah CreateNewStatement untuk membuat ekspresi Lambda dan lulus untuk memilih:

Ini akan mengembalikan urutan dengan objek data yang diisi dalam medan yang ditentukan. Sila ambil perhatian bahawa teknologi ini sesuai untuk bidang yang tidak diketahui semasa menyusun. Sekiranya medan yang dipilih adalah statik, ekspresi lambda konvensional atau kaedah berasaskan refleks lebih cekap.
<code class="language-csharp">var result = list.Select(CreateNewStatement("Field1, Field2"));</code>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah saya boleh memilih lajur secara dinamik dalam pertanyaan Linq?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan