如何在cshtml中将if条件判断正确转换为LINQ查询语句
cshtml视图中业务规则转LINQ筛选实现
你原来的多层判断逻辑本质是满足任意一个准入规则的记录即可展示,不需要在LINQ里写嵌套分支,直接把两个准入条件用逻辑或拼接即可,完整可运行代码如下:
@Html.Partial("Filter", new IndexModel() { Id = Model.Id, Collection = Model.Collection.Where(a => // 规则1:状态为1/2的记录直接展示 (a.CurrentStatus == 1 || a.CurrentStatus == 2) || // 规则2:状态为3/4、日期非空且距当前不超过30天的记录可展示 ( (a.CurrentStatus == 3 || a.CurrentStatus == 4) && a.Date.HasValue && (DateTime.Now - a.Date.Value).TotalDays <= 30 ) ) })
注意事项
- 代码里用
a.Date.HasValue判断可空日期非空,比写!= null更符合C#可空类型的书写习惯,效果完全一致 - 如果你的系统时间存储用的是UTC标准,把
DateTime.Now替换为DateTime.UtcNow即可,避免时区差导致30天的计算出现偏差 - 不要在razor视图的C#代码段里写HTML转义字符(比如你之前代码里的
&&、<),代码段内会按原生C#语法解析,直接写&&、<就可以正常运行
内容的提问来源于stack exchange,提问作者Earth
相关产品推荐
相关产品推荐

