SQL CASE-Anweisungen in LINQ übersetzen: Ein praktischer Leitfaden
Dieser Artikel befasst sich mit der Herausforderung, SQL-CASE-Anweisungen in ihre LINQ-Äquivalente zu konvertieren. Ein Benutzer suchte Hilfe bei der Übersetzung des folgenden SQL-Snippets:
<code class="language-sql">osc_products.products_quantity = CASE WHEN itempromoflag 'N' THEN 100000 WHEN itemcat1 IN ('1','2','31') AND itemsalestatus = 'S' THEN 100000 WHEN itemsalestatus = 'O' THEN 0 ELSE cds_oeinvitem.itemqtyonhand - cds_oeinvitem.itemqtycommitted END </code>
Der erste bereitgestellte LINQ-Versuch war unzureichend:
<code class="language-csharp">cdsDBDataContext db = new cdsDBDataContext(); var query = from items in db.cdsItems where items.ItemHandHeldFlag.Equals("Y") && items.ItemQtyOnHand - items.ItemQtyCommitted > 0 select items;</code>
Diese Abfrage filtert nur Daten; Es implementiert nicht die Logik der SQL-CASE-Anweisung.
Für eine klarere Darstellung des CASE-Anweisungsäquivalents von LINQ untersuchen wir ein einfacheres Beispiel:
<code class="language-csharp">Int32[] numbers = new Int32[] { 1, 2, 1, 3, 1, 5, 3, 1 }; var numberText = ( from n in numbers where n > 0 select new { Number = n, Text = ( n == 1 ? "One" : n == 2 ? "Two" : n == 3 ? "Three" : "Unknown" ) } );</code>
Dies demonstriert die Verwendung des ternären Bedingungsoperators (?:
), um das Verhalten einer CASE-Anweisung nachzuahmen. Die Bedingungen werden nacheinander ausgewertet und geben für jede Übereinstimmung den entsprechenden Wert zurück. Das Ergebnis ist eine Folge anonymer Objekte, die jeweils eine Zahl und deren Textdarstellung enthalten. Die Anwendung dieses Prinzips auf die ursprüngliche SQL-CASE-Anweisung erfordert einen ähnlichen verschachtelten bedingten Ansatz innerhalb der LINQ-Abfrage, der an die spezifische Datenstruktur und die Beziehungen innerhalb von db.cdsItems
angepasst wird und möglicherweise mit anderen Tabellen verknüpft wird, um auf itempromoflag
, itemcat1
und zuzugreifen itemsalestatus
. Die ELSE
-Bedingung würde den Standardwert darstellen, wenn keine der vorhergehenden Bedingungen erfüllt ist.
Das obige ist der detaillierte Inhalt vonWie kann ich SQL CASE-Anweisungen effektiv in LINQ-Abfragen übersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!