我有一个奇怪的问题,我需要根据价格范围过滤搜索结果。所以我有两个清单:
列出A ,其中包含所有价格的商品。
列表B 包含所有价格范围,例如价格b / w 20和30以及50-60之间的价格。
现在我需要在A中过滤结果,其中价格介于列表B中指定的价格范围之内。
我的linq查询是:
A - 产品数据
var list = (from a in db.MItems
join b in db.DCategoryProducts on a.ProductCode equals b.ProductCode
join c in db.DItemTargetAreas on a.ProductCode equals c.ProductCode
join d in db.DItemQuantities on a.ProductCode equals d.ProductCode
where a.IsActive && b.ItemCategoryCode == itemCategoryID
&& !string.IsNullOrEmpty(_targetarea) ? _targetarea.Contains(c.TargetArea.ToString()) : c.TargetArea == c.TargetArea
&& !string.IsNullOrEmpty(_compression) ? _compression.Contains(a.CompressionRating.ToString()) : a.CompressionRating == a.CompressionRating
&& !string.IsNullOrEmpty(_color) ? _color.Contains(d.ColourCode.ToString()) : d.ColourCode == d.ColourCode
&& !string.IsNullOrEmpty(_style) ? _style.Contains(d.StyleCode.ToString()) : d.StyleCode == d.StyleCode
&& !string.IsNullOrEmpty(_size) ? _size.Contains(d.SizeCode.ToString()) : d.SizeCode == d.SizeCode
&& a.Price between my price_ranges
orderby a.ProductName
select new Models.ViewModels.Product
{
ItemCategoryCode = a.ItemCategoryCode,
ProductCode = a.ProductCode,
ProductName = a.ProductName,
SmallPic = a.SmallPic,
Price = a.Price,
PriceWas = a.PriceWas,
IsNew = a.IsNew
}).Distinct().ToList();
B - 价格范围
var priceRanges = (from p in db.DPriceSlabs
where !string.IsNullOrEmpty(_priceSlab) ? _priceSlab.Contains(p.PRICE_ID.ToString()) : p.PRICE_ID == p.PRICE_ID
select new { p.PRICE_FROM, p.PRICE_TO }).ToList();
如何通过应用列表B 中的过滤器,从列表A 中获得所需结果?对当前查询的任何改进也将非常感激。
TIA
答案 0 :(得分:6)
你想要这样的东西吗?
list.Where(item => priceRanges.Any(price => item.Price >= price.PRICE_FROM && item.Price <= p.PRICE_TO ));