我害怕問這個問題,因爲到目前爲止我所讀到的,我明白我將不得不將新東西塞進我的腦海。儘管存在所有類似的問題(以及各種各樣的答案),但我認爲我會一直沒有問過我已經閱讀了我所需要的具體足夠的裁縫。動態SQL動態SQL到MS.NET SQL Server 2008 VB.NET動態LINQ
我要代表使用LINQ以下查詢:
DECLARE @PurchasedInventoryItemID Int = 2 DECLARE @PurchasedInventorySectionID Int = 0 DECLARE @PurchasedInventoryItem_PurchasingCategoryID Int = 3 DECLARE @PurchasedInventorySection_PurchasingCategoryID Int = 0 DECLARE @IsActive Bit = 1 DECLARE @PropertyID Int = 2 DECLARE @PropertyValue nvarchar(1000) = 'Granny Smith' --Property1, Property2, Property3 ... SELECT O.PurchasedInventoryObjectID, O.PurchasedInventoryObjectName, O.PurchasedInventoryConjunctionID, O.Summary, O.Count, O.PropertyCount, O.IsActive FROM tblPurchasedInventoryObject As O INNER JOIN tblPurchasedInventoryConjunction As C ON C.PurchasedInventoryConjunctionID = O.PurchasedInventoryConjunctionID INNER JOIN tblPurchasedInventoryItem As I ON I.PurchasedInventoryItemID = C.PurchasedInventoryItemID INNER JOIN tblPurchasedInventorySection As S ON S.PurchasedInventorySectionID = C.PurchasedInventorySectionID INNER JOIN tblPurchasedInventoryPropertyMap as M ON M.PurchasedInventoryObjectID = O.PurchasedInventoryObjectID INNER JOIN tblPropertyValue As V ON V.PropertyValueID = M.PropertyValueID WHERE I.PurchasedInventoryItemID = @PurchasedInventoryItemID AND S.PurchasedInventorySectionID = @PurchasedInventorySectionID AND I.PurchasingCategoryID = @PurchasedInventoryItem_PurchasingCategoryID AND S.PurchasingCategoryID = @PurchasedInventorySection_PurchasingCategoryID AND O.IsActive = @IsActive AND V.PropertyID = @PropertyID AND V.Value = @PropertyValue
現在,我知道,在.NET查詢犯規這個樣子,這是我在SQL設計工作室測試。自然VB.NET變量將被用來代替SQL本地變量。
我的問題是這樣的:「WHERE」之後的所有條件都是可選的。在這種情況下,查詢可能會使用一個,一些,全部或者沒有任何條件。 V.PropertyID和V.Value也可以出現任意次數。
在VB.NET中,我可以通過簡單地連接字符串,並使用循環來附加「V.PropertyID/V.Value」條件,使這個查詢變得足夠簡單。
我也可以在MS SQL中創建一個存儲過程,這很容易。
但是,我想用LINQ來完成這個任務。
如果有人能指導我,我會非常感激。
我認爲動態sql很不幸會成爲你最好的選擇。然而,我會做的是在存儲過程中在服務器上構建並使用sp_executesql來運行它。那麼你可能會簡化你的.ExecuteQuery()調用來簡單地調用存儲過程名稱。 – 2010-05-24 20:28:37
好東西知道,因爲這感覺錯了,重新確保有人告訴我這可能是我更好的選擇。 – instantmusic 2010-05-24 20:51:39