Wie kann ich linq2db mitteilen, wie ein gegebener Ausdruck, dh Split (char), in SQL übersetzt werden soll, wenn er nicht weiß, wie dies zu tun ist?
Ich benutzelinq2db
und obwohl es für die meisten CRUD-Operationen gut genug funktioniert, habe ich viele Ausdrücke gefunden, die es einfach nicht in SQL übersetzen kann.
Es ist so weit gekommen, dass ich mir Sorgen mache, wenn ich nicht im Voraus genau weiß, um welche Art von Ausdrücken es sich handelt und sie zuvor erfolgreich aufgerufen hablinq2db
wird durch die Kosten aufgewogen, die anfallen, wenn versucht wird, die beleidigenden Ausdrücke zu finden und dann zu entfernen (oder von der Serverseite zu entfernen).
Wenn ich wusste, wie man @ salinq2db
wie man ein @ parExpression<Func<T,out T>>
oder was nicht in SQL, wann immer es auf einer Ad-hoc-Basis benötigt wird, dann wäre ich viel sicherer und ich könnte viele Dinge mit diesem Tool tun.
Nimm zum Beispiel,String.Split(char separator)
, die Methode, die ein @ annimstring
und einchar
um ein @ zurückzugebstring[]
jedes Teilstrings zwischen dem Trennzeichen.
Angenommen, mein TischEquipment
hat ein nullbaresvarchar
FeldUsages
enthält Listen mit verschiedenen Gerätenutzungen, die durch Kommas getrennt sind.
Ich muss implementierenIList<string> GetUsages(string tenantCode, string needle = null)
gibt eine Liste der Verwendungszwecke für einen bestimmten Mandantencode und eine optionale Suchzeichenfolge aus.
Meine Abfrage wäre dann so etwas wie:
var listOfListOfStringUsages =
from et in MyConnection.GetTable<EquipmentTenant>()
join e in MyConnection.GetTable<Equipment>() on et.EquipmentId = e.EquipmentId
where (et.TenantCode == tenantCode)
where (e.Usages != null)
select e.Usages.Split(','); // cannot convert to sql here
var flattenedListOfStringUsages =
listOfListOfStringUsages.SelectMany(strsToAdd => strsToAdd)
.Select(str => str.Trim())
.Distinct();
var list = flattenedListOfStringUsages.ToList();
Es würde jedoch zur Laufzeit auf der durch comment angegebenen Linie explodieren.
Ich verstehe das totallinq2db
s kann nicht erwartet werden, dass die Ersteller von @ mit jeder Kombination von @ ausgeliefert werdestring
Methode und Hauptdatenbankpaket.
Zur gleichen Zeit habe ich das Gefühl, als könnte ich sagen, wie ich damit umgehen soll, wenn ich nur ein Beispiel dafür sehen könnte (jemand, der einen benutzerdefinierten Ausdruck implementiert).
Also meine Frage ist:Wi muss ich @ anweislinq2db
wie man ein @ parExpression
dass es nicht aus der Box analysieren kann?