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
相关产品推荐
相关产品推荐

