You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LINQ Where无维度产品基础价格判断逻辑失效问题咨询

问题原因及修复方案

你的无维度产品价格判断失效,核心问题是判断产品是否含维度的逻辑写反了:

原代码中判断维度存在的条件是:

product.PProduseCuDimensiuni!.Count > 0 || product.PProduseCuDimensiuni != null

这个逻辑的问题在于:只要PProduseCuDimensiuni不为null(哪怕它是空集合,Count=0),条件就会为true,进而进入维度判断分支。但空集合调用Any()会返回false,导致这部分本应走无维度判断的产品被错误过滤,最终表现为无维度产品的基础价格判断失效。

修复后的代码

调整维度判断的逻辑,只有当集合不为null且包含元素时,才走维度价格判断,否则走基础价格判断:

.Where(product => productPrices.IsNullOrEmpty() || 
                  (
                      // 修正:判断集合非空且有元素
                      product.PProduseCuDimensiuni != null && product.PProduseCuDimensiuni.Count > 0
                          ? product.PProduseCuDimensiuni.Any(dimension =>
                              dimension.PretRedus > 0
                                  ? dimension.PretRedus >= Convert.ToDecimal(productPrices![0]) && dimension.PretRedus <= Convert.ToDecimal(productPrices[1])
                                  : dimension.Pret >= Convert.ToDecimal(productPrices![0]) && dimension.Pret <= Convert.ToDecimal(productPrices[1])
                          )
                          : product.PretDeBazaRedus > 0 
                                    ? product.PretDeBazaRedus >= Convert.ToDecimal(productPrices![0]) && product.PretDeBazaRedus <= Convert.ToDecimal(productPrices[1])
                                    : product.PretDeBaza >= Convert.ToDecimal(productPrices![0]) && product.PretDeBaza <= Convert.ToDecimal(productPrices[1])
                      
                  )
        )

进一步优化(可选)

用Any()替代Count > 0,对LINQ to Entities更友好(避免不必要的计数查询):

product.PProduseCuDimensiuni?.Any() ?? false

替换后代码:

.Where(product => productPrices.IsNullOrEmpty() || 
                  (
                      (product.PProduseCuDimensiuni?.Any() ?? false)
                          ? product.PProduseCuDimensiuni!.Any(dimension =>
                              dimension.PretRedus > 0
                                  ? dimension.PretRedus >= Convert.ToDecimal(productPrices![0]) && dimension.PretRedus <= Convert.ToDecimal(productPrices[1])
                                  : dimension.Pret >= Convert.ToDecimal(productPrices![0]) && dimension.Pret <= Convert.ToDecimal(productPrices[1])
                          )
                          : product.PretDeBazaRedus > 0 
                                    ? product.PretDeBazaRedus >= Convert.ToDecimal(productPrices![0]) && product.PretDeBazaRedus <= Convert.ToDecimal(productPrices[1])
                                    : product.PretDeBaza >= Convert.ToDecimal(productPrices![0]) && product.PretDeBaza <= Convert.ToDecimal(productPrices[1])
                      
                  )
        )

内容的提问来源于stack exchange,提问作者Misu Stefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 17:15:09