我害怕问这个问题,因为到目前为止我所读到的,我明白我将不得不将新东西塞进我的脑海。尽管存在所有类似的问题(以及各种各样的答案),但我认为我会一直没有问过我已经阅读了我所需要的具体足够的裁缝。动态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