如何在LINQ Where子句中使用三元运算符实现条件筛选
问题分析与解答
你的三元运算符写法不正确
你当前的LINQ语句中,三元运算符的else分支写了false,这会导致所有非Maths的记录都被过滤掉,完全不符合需求(需求是其余Subject无额外条件,应该保留)。
正确的写法
方式1:用三元运算符实现
把三元逻辑调整为:当Subject是Maths时,判断Score≥50;否则直接保留该记录(返回true):
(from tbl in dbContext.Table1 where tbl.Subject == "Maths" ? tbl.Score >= 50 : true select tbl)
方式2:更直观的逻辑表达式(推荐)
其实不需要强行用三元,直接用逻辑或的写法更清晰,还能避免运算符优先级的混淆(可加括号明确逻辑):
var r = dbContext.Table1 .Where(x => (x.Subject == "Maths" && x.Score >= 50) || x.Subject != "Maths");
或者等价的更简洁写法:
var r = dbContext.Table1 .Where(x => x.Subject != "Maths" || x.Score >= 50);
这个逻辑是:只要不是Maths科目,或者是Maths且Score≥50,就保留记录,完全匹配需求。
验证结果
以上写法都会得到你期望的输出:
1 Pinky English 60 3 Mahesh Maths 50 4 Rani Maths 50 5 Rani Eco 50
内容的提问来源于stack exchange,提问作者Pinky
相关产品推荐
相关产品推荐

