"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso selecionar dinamicamente as colunas nas consultas LINQ?

Como posso selecionar dinamicamente as colunas nas consultas LINQ?

Postado em 2025-02-26
Navegar:733

How Can I Dynamically Select Columns in LINQ Queries?

seleção de colunas dinâmicas em linq

selecionar dinamicamente uma coluna específica em uma consulta LINQ pode ser desafiadora quando a coluna é desconhecida no momento da compilação. No entanto, existe uma solução que envolve a criação dinamicamente de expressões lambda passadas para selecionar.

Considere a seguinte classe de dados:

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

Para selecionar dinamicamente colunas específicas, você pode usar o método CreateNewStatement para criar uma expressão lambda dinamicamente:

• { var xParameter = Expression.Parameter (tipoof (dados), "O"); var xNew = expressão.new (typeof (dados)); var ligantes = fields.split (',') .Select (O => O.Trim ()) .Select (o => { var mi = typeof (dados) .getProperty (O); var xoriginal = expressão.property (xParameter, MI); Return Expression.Bind (Mi, Xoriginal); }); var xinit = Expression.Memberinit (XNew, Bindings); var lambda = expressão.lambda > (xinit, xParameter); retornar lambda.compile (); }
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();
}

você pode usar o método CreateNewStatement para criar uma expressão lambda e passá -lo para selecionar:

...

Isso retornará uma sequência de objetos de dados com o campo especificado preenchido. Observe que esta técnica é adequada para situações em que o campo selecionado não é conhecido no momento da compilação. Se o campo selecionado for estático, é mais eficiente usar expressões regulares de lambda ou métodos baseados em reflexão.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3