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.lambdaprivate 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.
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