Dynamic Where Linq C#

本文关键字:Linq Where Dynamic | 更新日期: 2023-09-27 18:26:01

我正在使用System.Linq.Dynamic使dinanmico在我的研究中发挥作用。在下面的代码中,我试图通过Funcao进行过滤,但返回错误:

No property or field 'Funcao' exists in type 'ASO'

如何使用Linq的别名进行筛选?

代码

public static ResultadoListagemPadrao Grid(int iniciarNoRegistro, int qtdeRegistro, string orderna, string ordenaTipo, string filtro, int filtroID, UsuarioLogado usuarioLogado)
{
    var where = "";
    var id = 0;
    if (filtroID > 0)
        where += " FuncionarioID == " + filtroID.ToString();
    else
    {
        if (int.TryParse(filtro, out id))
            where += " ASOID == " + id.ToString();
        if (filtro != null)
            where += " Funcao.Contains(@0) "; 
    }
    using (var db = new ERPContext())
    {
        var resultado = new ResultadoListagemPadrao();
        resultado.TotalRegistros = db.ASO.Total(usuarioLogado.EmpresaIDLogada);
        resultado.TotalRegistrosVisualizados = db.ASO.ToListERP(usuarioLogado.EmpresaIDLogada).AsQueryable().Where(where, filtro).Count();
        resultado.Dados =
            (from a in db.ASO.ToListERP(usuarioLogado.EmpresaIDLogada).AsQueryable()
                select new
                {
                    a.ASOID,
                    a.FuncionarioID,
                    Cliente = a.Funcionario.Cliente.Pessoa.Nome,
                    Setor = a.FuncionarioFuncao.Funcao.Setor.Descricao,
                    Funcao = a.FuncionarioFuncao.Funcao.Descricao,
                    Funcionario = a.Funcionario.Pessoa.Nome,
                    a.DtASO,
                    a.Status                         
                })
            .Where(where, filtro)
            .OrderBy(orderna + " " + ordenaTipo)
            .Skip(iniciarNoRegistro)
            .Take(qtdeRegistro)
            .ToArray();
        return resultado;
    }
}

Dynamic Where Linq C#

问题是这行db.ASO.ToListERP(usuarioLogado.EmpresaIDLogada).AsQueryable().Where(where, filtro)

您的类ASO没有属性Funcao

尝试删除该行上的Where。试试这个。。。

        var resultado = new ResultadoListagemPadrao();
        resultado.TotalRegistros = db.ASO.Total(usuarioLogado.EmpresaIDLogada);
        var query = (from a in db.ASO.ToListERP(usuarioLogado.EmpresaIDLogada).AsQueryable()
                select new
                {
                    a.ASOID,
                    a.FuncionarioID,
                    Cliente = a.Funcionario.Cliente.Pessoa.Nome,
                    Setor = a.FuncionarioFuncao.Funcao.Setor.Descricao,
                    Funcao = a.FuncionarioFuncao.Funcao.Descricao,
                    Funcionario = a.Funcionario.Pessoa.Nome,
                    a.DtASO,
                    a.Status                         
                })
            .Where(where, filtro);
        resultado.TotalRegistrosVisualizados = query.Count();    
        resultado.Dados = query 
            .OrderBy(orderna + " " + ordenaTipo)
            .Skip(iniciarNoRegistro)
            .Take(qtdeRegistro)
            .ToArray();
        return resultado;

请以后翻译您的代码。