Ich habe eine solche Anfrage
(from u in DataContext.Users
where u.Division == strUserDiv
&& u.Age > 18
&& u.Height > strHeightinFeet
select new DTO_UserMaster
{
Prop1 = u.Name,
}).ToList();
Ich möchte die verschiedenen Bedingungen wie Alter und Größe hinzufügen, je nachdem, ob diese Bedingungen für die Methode bereitgestellt wurden, mit der diese Abfrage ausgeführt wird. Alle Bedingungen umfassen die Benutzerabteilung. Wenn das Alter angegeben wurde, möchte ich das der Abfrage hinzufügen. Wenn die Höhe angegeben wurde, möchte ich dies ebenfalls hinzufügen.
Wenn dies mit SQL-Abfragen geschehen wäre, hätte ich den String Builder verwendet, um sie an die strSQL-Hauptabfrage anzuhängen. Aber hier in Linq kann ich mir nur vorstellen, eine IF-Bedingung zu verwenden, bei der ich dieselbe Abfrage dreimal schreibe, wobei jeder IF-Block eine zusätzliche Bedingung hat. Gibt es einen besseren Weg, dies zu tun?
quelle
LINQ to Entities does not recognize the method 'System.String get_Item(System.String)' method, and this method cannot be translated into a store expression.
Normalerweise verwende ich Methodenverkettung, habe aber das gleiche Problem. Und hier ist die Erweiterung, die ich benutze
Es hilft, Kettenbrüche zu vermeiden. Auch das gleiche
ConditionalOrderBy
undConditionalOrderByDescending
sind hilfreich.quelle
eine Option.
oder Sie können zur Methodensyntax für linq wechseln und if-Bedingungen verwenden, um Ausdrücke an die where-Klausel anzuhängen.
quelle
Ich verwende es einfach in meiner where-Klausel als
quelle
Fügen Sie basierend auf bestimmten Bedingungen die where-Bedingung hinzu ...
quelle
Hier ist mein Code, um etwas Ähnliches zu tun. Dies ist eine Methode in meiner WCF SOAP Web Service-API.
Die Basisabfrage
Select(f => f)
bedeutet im Grunde ALLES, und dieWhere
Klauseln sind optional daran angehängt. Das FinaleSelect
ist optional. Ich verwende, um die Datenbankzeilenobjekte in Ergebnisobjekte "Fruit" zu konvertieren.quelle
Angenommen, der folgende Parameter:
Durch einfache Verwendung
&&
und||
bedingte Operatoren können wir eine andere Version haben.Wie bei Param1 können Sie eine beliebige Anzahl von Parametern für die Suchbedingung hinzufügen.
quelle
Ich bin gerade auf die Suche nach etwas anderem gestoßen, dachte aber, ich würde die Lambda-Version einwerfen.
Zuerst würde ich eine Klasse wie diese erstellen, um Parameter an eine Datenschicht zu übergeben:
Dann in meiner Datenschicht so etwas:
Wo Sie die Abfrage materialisieren, liegt bei Ihnen. Möglicherweise besteht eine Ebene zwischen der App und den Daten, die db-spezifische Darstellungen in db-agnostisch konvertiert (möglicherweise fragen Sie mehrere Datenquellen ab). Diese Ebene kann mehrere Arten von Abfragbarkeiten aus diesen Quellen abrufen und sie beispielsweise einer gemeinsamen POCO-Darstellung zuordnen.
quelle
Um die oben akzeptierte Antwort hier zu ergänzen , sollten Sie bei einer dynamischen Suche in einem Join ein neues Objekt mit beiden Tabellen (t1, t2) in der anfänglichen linq-Abfrage zurückgeben, damit Sie einzeln darauf zugreifen können, um die Bedingung zu erfüllen Suche.
Ich bekam die Antwort , die ich suchte , hier in Bezug auf die Verbindung von zwei Tabellen und Abfragen von bestimmten Spalten auf eine der beiden Tabellen
quelle