Igo*_*hov 15 c# entity-framework
我有一个使用Entity Framework的查询.它有许多不同的操作数,我对它的优先级感到困惑.我收到了错误的结果.我需要所有记录,IsPaid == true或者IsPaid == null所有记录必须是,TypeId == 1或者TypeId == 2也必须是CityId == 1和CategoryId == 2.由于某种原因,它没有评估CityId和CategoryId.我究竟做错了什么?谢谢.
var list = db.Ads.Where (x =>
x.IsPaid == true || x.IsPaid == null &&
x.TypeId == 1 || x.TypeId == 2 &&
x.CityId == 1 && x.CategoryId == 2
).ToList();
Run Code Online (Sandbox Code Playgroud)
Tim*_*idt 28
解决此问题的最佳方法是使用括号.即使您知道绑定优先级,也应始终使用它们,以提高代码的可读性.
(x.IsPaid == true || x.IsPaid == null) && (x.TypeId == 1 || x.TypeId == 2) && x.CityId == 1 && x.CategoryId == 2
Run Code Online (Sandbox Code Playgroud)
&& 比...更高的亲和力 ||
因此,false && false || true将被转换为(false && false) || true=> true
联盟论坛由@Joey提到:
而不是(x.IsPaid == true || x.IsPaid == null)你可以写(x.IsPaid != false).
由于运算符优先级,&&绑定高于||.
如果你链接Where语句,那么更清楚会发生什么:
var list = db.Ads
.Where(x => x.IsPaid == true || x.IsPaid == null)
.Where(x=> x.TypeId == 1 || x.TypeId == 2)
.Where(x=> x.CityId == 1)
.Where(x=> x.CategoryId == 2)
.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2835 次 |
| 最近记录: |