Динамический, где Linq C #

1

Я использую 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;
    }
}
  • 4
    Для этой конкретной проблемы я не вижу необходимости использовать Dynamic-LINQ, обычный LINQ должен работать. Вы можете связать свои утверждения Where .
Теги:
linq
entity-framework
asp.net-mvc-4

1 ответ

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;

Пожалуйста, в будущем переведите свой код.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню