Linq中结合And与Or多条件查询的代码问题求助
修正Linq查询中And/Or混合条件的语法错误
你的代码存在语法错误与逻辑运算符优先级问题,以下是具体修正方案:
错误点说明
- Lambda表达式语法错误:
Where方法内错误嵌套了第二个(g => g.StatusDoc== "Success")lambda声明,应直接编写条件表达式,无需额外的lambda结构。 - 逻辑运算符优先级问题:
||与&&混合使用时,&&优先级更高,会导致g.OEvaUserEva == id && g.StatusDoc== "Success"先执行,不符合你"任一字段等于id且StatusDoc为Success"的需求,需将三个||条件用括号包裹,确保逻辑顺序正确。 - 括号不匹配:
Where参数的外层括号多余,且条件末尾缺少闭合括号。
修正后的完整代码
public ActionResult Get(string id) { try { var result = ( from pre in context.PreChanges join cus in context.PreEvaCustomers on pre.DocNumber equals cus.CDocNumber join env in context.PreEvaEnvis on pre.DocNumber equals env.EDocNumber join oth in context.PreEvaOthers on pre.DocNumber equals oth.ODocNumber join sta in context.StatusDocs on pre.DocNumber equals sta.SDocNumber select new GetAll { DocNumber = pre.DocNumber, Users = pre.Users, UserId = pre.UserId, CDocNumber = cus.CDocNumber, CEvaUserEva = cus.CEvaUserEva, EDocNumber = env.EDocNumber, EEvaUserEva = env.EEvaUserEva, ODocNumber = cus.CDocNumber, OEvaUserEva = oth.OEvaUserEva, SDocNumber = sta.SDocNumber, StatusDoc = sta.StatusDoc }) .Where(g => (g.CEvaUserEva == id || g.EEvaUserEva == id || g.OEvaUserEva == id) && g.StatusDoc == "Success"); return Ok(result); } catch (Exception ex) { return BadRequest(ex.Message + "GetC 47"); } }
修正后的逻辑说明
修正后的Where条件精准实现了需求:
- 先判定
CEvaUserEva、EEvaUserEva、OEvaUserEva三个字段中任意一个等于传入的id - 同时满足
StatusDoc字段值为Success
内容的提问来源于stack exchange,提问作者MRA
相关产品推荐
相关产品推荐

