2011-06-03 155 views
0

這就是我得到:如何改進LINQ查詢?

int? productID = (ClientProduct != null ? (int?)ClientProduct.ProductID : null); 

result = (from po in ((Chase_Media_Pro_Entity_Model)this.NavigationItem.ObjectContext).raPurchaseOrder_List 
        where po.ClientID == Client.CustomerID 
         && ((object.Equals(po.ClientProductID, productID)) || (po.ClientProductID == (productID ?? po.ClientProductID))) 
         && (po.Is_Active == (isActive ?? po.Is_Active)) 
         && (po.IsApproved == (isApproved ?? po.IsApproved)) 
        orderby po.Is_Active descending, po.IsApproved ascending 
        select po); 

是否有改善這一行的方式:

&& ((object.Equals(po.ClientProductID, productID)) || (po.ClientProductID == (productID ?? po.ClientProductID))) 

這是我能得到正確的結果的唯一途徑。

+1

什麼'ClientProduct.ProductID'的類型?你的代碼看起來很奇怪。 – 2011-06-03 10:21:00

+0

@Danny:int。你看起來很奇怪嗎?它只是處理NULL值。 – Willem 2011-06-03 10:26:31

+1

那你爲什麼要用'object.Equals'來比較兩個整數...... – 2011-06-03 10:27:58

回答

1

如何

&& ((productID.HasValue && po.ClientProductID.HasValue) ? po.ClientProductID.Value = productID.Value : true) 
3
&& (!productID.HasValue || (productID == po.ClientProductID))