LINQ enthält eine Übereinstimmung aus einem String-Array

8

Probleme damit, dass dies funktioniert:

%Vor%

Ich bekomme:

  

System.NotSupportedException: Lokale Sequenz kann in LINQ to SQL-Implementierungen von Abfrageoperatoren mit Ausnahme des Contains-Operators nicht verwendet werden.

Ich möchte Datensätze zurückgeben, in denen das Feld c.Term eines der Wörter im Array Words enthält. Ich würde es auch gerne nach der Gesamtzahl der Spiele sortiert haben, aber das scheint wirklich schwer zu sein! Ich habe diese MSDN gefunden. Aber ich kann es auch nicht mit meiner Anfrage arbeiten. Auch hat das gefunden, aber es funktioniert nicht .

    
Tom Gullen 09.09.2011, 16:27
quelle

3 Antworten

5

Ok, nachdem ich genug davon weggesteckt habe, wurde mir klar, dass das Problem nicht die Any oder die Contains war. Linq to SQL mag es nicht, wenn Sie die lokale Sequenz (Wörter) mit der SQL-Sammlung (db.tblSearches) kombinieren. Um dies zu erreichen, müssen Sie es in zwei separate Abfragen aufteilen.

%Vor%

Denken Sie daran, dass in der zweiten Abfrage die Contains Groß- und Kleinschreibung unterscheidet, also müssen Sie möglicherweise eine Methode ohne Berücksichtigung der Groß- / Kleinschreibung hinzufügen oder in die alte Schule gehen und sie mit .ToUpper() kicken. Ich habe das in 4.0 in einem meiner Kontexte ausgeführt und es hat alle 88 Strings korrekt zurückgegeben (von einem möglichen 9814). Obwohl es eine gründliche PITA war. Definitiv +1 zu dieser Frage.

Bearbeiten: % Co_de% zur endgültigen Antwort hinzugefügt.

    
Joel Etherton 09.09.2011, 17:52
quelle
2

Konvertiere zuerst dein Array in eine Liste,

%Vor%

Ändern Sie dann Ihre linq-Abfrage wie folgt:

%Vor%

Ich denke aber, dass ich dein Problem sehe. In Ihrer ursprünglichen Abfrage verwenden Sie c.Term.Contains () ... Contains ist eine Erweiterungsmethode, die für ein Objekt aufgerufen werden muss, das Enumerable implementiert, so dass Sie es nicht in einem Feld aufrufen können, das Sie von Ihrem Datenbankaufruf zurückerhalten. Das ist der Grund, warum der andere Benutzer, der Ihre Frage beantwortet hat, gesagt hat, dass Sie Dinge in Ihren Contains umdrehen müssen, weil Sie diesen Aufruf nie auf c.Terms machen können.

    
esastincy 09.09.2011 17:03
quelle
1

Sie müssen die Reihenfolge der Contains-Klausel umkehren:

%Vor%     
Jim Wooley 09.09.2011 16:30
quelle

Tags und Links