C# lambda表达式中的条件where

C# lambda表达式中的条件where,c#,linq,C#,Linq,我必须用条件表达式进行lambda查询。在我的方法中,此条件为且对于一个或任何条件为true的签名赋值 我尝试: 我的方法: public UsuariosAcoesGrid ObterUsuariosAcoesBusca( Int32 PageNumber, Int32 PageSize, Guid? AcaoUsuario, DateTime? DataInicio, DateTime? DataFinal, Guid CodigoU

我必须用条件表达式进行lambda查询。在我的方法中,此条件为且对于一个或任何条件为true的签名赋值

我尝试:

我的方法:

public UsuariosAcoesGrid ObterUsuariosAcoesBusca(
    Int32 PageNumber, 
    Int32 PageSize, 
    Guid? AcaoUsuario, 
    DateTime? DataInicio, 
    DateTime? DataFinal, 
    Guid CodigoUsuario, 
    Guid cdUsuario)
我的查询

var query = (from UsuariosLogs in ctx.tb_Usuarios_Logs
             join Usuarios in ctx.tb_Usuarios on UsuariosLogs.idUsuario equals Usuarios.idUsuario
             join Menu in ctx.tb_Menu_Painel on UsuariosLogs.idMenu equals Menu.idMenu
             join ParametrosAcoes in ctx.tb_Param_AcoesUsuario on UsuariosLogs.idAcaoUsuario equals ParametrosAcoes.idAcaoUsuario
             where (
             Usuarios.cdUsuario == CodigoUsuario
             && (DataInicio != null && DataFinal != null) ? UsuariosLogs.dtLog >= DataInicio && UsuariosLogs.dtLog <= DataFinal : UsuariosLogs.dtLog != null
             && (AcaoUsuario != null) ? ParametrosAcoes.cdAcaoUsuario == AcaoUsuario : ParametrosAcoes.cdAcaoUsuario != null
             )
             select new
             {
                 CodUsuario = Usuarios.cdUsuario,
                 CodAcaoUsuario = ParametrosAcoes.cdAcaoUsuario,
                 Menu = Menu.lbMenu,
                 AcaoUsuario = ParametrosAcoes.lbAcaoUsuario,
                 DataLog = UsuariosLogs.dtLog,
                 Descricao = UsuariosLogs.lbDescricao,
                 Comando = UsuariosLogs.dsComando,
                 IdUsuario = Usuarios.idUsuario,
                 NomeUsuario = Usuarios.dsNome
             }).OrderByDescending(l => l.DataLog);
var query=(来自ctx.tb\u Usuarios\u日志中的UsuariosLogs
在Usuarios slogs.idUsuario等于Usuarios.idUsuario上的ctx.tb_Usuarios中加入Usuarios
在UsuariosLogs.idMenu等于Menu.idMenu上的ctx.tb\u Menu\u Painel中加入菜单
在usuarios上的ctx.tb_Param_AcoesUsuario中加入参数集。idacausuario等于参数集。idacausuario
在哪里(
Usuarios.cdUsuario==CodigoUsuario
&&(DataInicio!=null&&DataFinal!=null)?UsuariosLogs.dtLog>=DataInicio&&UsuariosLogs.dtLog l.DataLog);
在我的数据库中,我在SQL SERVER中有两行代码,其中AcaoUsuario='SomeGuid'

但是当我执行上面的查询时,我得到了表中的所有行

有人能帮我吗


非常感谢。

您可能需要在条件表达式周围加上一些括号。
?:
运算符的优先级非常低。完全同意@MichaelLiu-将所有?:代码放在括号中,看看您得到了什么。如果新代码仍然不起作用,请用新代码更新您的问题。这是EF还是Linq2Sql?@Michael Liu,Thanks太多了。它现在的工作!!!…不,解决方案是根本不使用这个结构。添加谓词。所有这些检查都会导致查询不必要的繁重。