【问题标题】:Dynamic Where Linq C#动态 Where Linq C#
【发布时间】:2014-10-09 14:06:39
【问题描述】:

我正在使用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-LINQ,常规的 LINQ 应该可以工作。您可以链接您的 Where 语句。

标签: c# linq entity-framework asp.net-mvc-4


【解决方案1】:

问题是这一行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;

请在以后翻译您的代码。

【讨论】:

    猜你喜欢
    • 2023-03-29
    • 2016-06-21
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2020-04-21
    • 2010-10-25
    相关资源
    最近更新 更多