Je redoute de poser cette question, car avec ce que j'ai lu jusqu'à présent, je vais comprendre qu'il va falloir entasser de nouvelles choses dans ma tête. En dépit de toutes les questions similaires (et de la grande variété de réponses), je pensais que je ne demanderais rien d'autre que d'avoir lu aux tailleurs ce dont j'avais besoin.SQL dynamique à LINQ dynamique dans VB.NET avec MS SQL Server 2008
J'ai besoin de représenter la requête suivante en utilisant 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
Maintenant, je sais que dans une requête .NET ne ressemble pas à cela, c'est mon test dans la conception SQL Studio. Naturellement, les variables VB.NET seront utilisées à la place des variables locales SQL.
Mon problème est le suivant: Toutes les conditions après "WHERE" sont facultatives. En ce qu'une requête pourrait être faite qui utilise une, certaines, toutes, ou aucune des conditions. V.PropertyID et V.Value peuvent également apparaître autant de fois que vous le souhaitez.
Dans VB.NET, je peux rendre cette requête assez simple en concaténant simplement des chaînes, et en utilisant une boucle pour ajouter les conditions "V.PropertyID/V.Value".
Je peux aussi faire une procédure stockée en MS SQL, ce qui est assez facile.
Cependant, je veux accomplir cela en utilisant LINQ.
Si quelqu'un pouvait me diriger, je serais très reconnaissant.
Je pense que le SQL dynamique sera malheureusement votre meilleur pari ici. Ce que je ferais, cependant, est de construire cela sur le serveur dans une procédure stockée et d'utiliser sp_executesql pour l'exécuter. Ensuite, vous pourrez peut-être simplifier votre appel .ExecuteQuery() en appelant simplement un nom de procédure stockée. –
Bonne chose à savoir, puisque cela se sent si mal son re-assurer que quelqu'un me dise que c'est peut-être ma meilleure option. – instantmusic