我要實現我的ASP.NET MVC應用程序,在這裏用戶可以選擇的商品搜索1個或多個標準高級搜索。高級搜索使用Lambda表達式
比方說,我有這些標準:顏色,大小,價格範圍。
這是據我得到到目前爲止
ProductSizeList = db.ProductSizes.Where(ProductSize =>
(string.IsNullOrEmpty(ProductColorId) || ProductSize.Product.ProductColors.Where(a => a.ColorID == IntColorId).Any())
).GroupBy(x => x.ProductID).Select(Grouped => Grouped.FirstOrDefault()).ToList();
我有Product
和Color
表之間的許多一對多關係,ProductColor
是一個聯繫起來。與Product
,ProductSize
,Size
表同樣的事情。
的代碼與Size
,並且Price Range
完美的工作。與Color
的問題,因爲.Any()
時返回找到的第一個Product
。如果有多個Product
,它只返回第一個。
所以,我想知道是否有另一個方法,或另一種方式能夠獲得具有指定顏色的所有產品。
我搜索了很多,並知道我可以動態構建Where Clause,但我認爲這對我的需求來說太多了。如果有一個簡單的解決方案,我會更高興。
編輯
我刪除了工作,作爲通緝代碼由@Jeroen的建議,離開了一個我想解決。
解決
我固定它,這要歸功於結合@jason和@Marlon答案。我將把解決方案放在一個單獨的答案中。我只想了解2點:
- 爲什麼它只工作正確,當我基於我的產品查詢?
- 爲什麼`.Distinct()`沒有做任何事情,我得到了重複的產品。
你可能應該看看Predicates(https://stackoverflow.com/a/1710395/3951051)並可能鏈接它們。 (https://stackoverflow.com/questions/1248232/combine-multiple-predicates) – WhoIsJohnDoe
如果你將代碼修剪到你遇到問題的實際lambda(部分),並且包含一些最小的設置代碼來重現問題。目前我覺得有很多代碼讓你分心,因爲你遇到了實際的問題。 – Jeroen
我想你不是通過調用Any()來過濾你的結果,而是在這裏:Grouped.FirstOrDefault()。順便說一句,你可以直接調用任何謂詞而不使用Where子句:Any(a => a.ColorID == IntColorId) – FireAlkazar