2017-02-21 2 views
1

Ich versuche, eine LINQ-Abfrage zu entwickeln, die testet, ob die Zeichenfolge aus einer Datenbank in einem Array ohne Teilstrings True zurückgibt, nur die gesamte Zeichenfolge.Anonyme multiple Eingabe-Funktion für Ausdruck in LINQ

Func<int, string[], bool> predicate = (i, x) => x.Any(i.ToString().Equals); 

       user.Company += (from c in context.Tbl_Institute 
           where (predicate(c.Institute_ID,values)) 
           select c.Institute_Title + "," 
           ).ToString(); 

Ich habe dies so weit, die kompiliert, sondern bietet mir eine Fehlermeldung aus: Der LINQ Ausdruck Knotentyp ‚Invoke‘ ist nicht auf Entitäten in LINQ unterstützt.

Welche von der Forschung scheint zu bedeuten, dass ich einen Ausdruck verwenden muss.

Dies kompiliert jedoch nicht.

Expression`<Func<int, string[], bool>> predicate = (i, x) => x.Any(i.ToString().Equals);` 

Als predicate(c.Institude_ID,values) hat einen Fehler beim Lesen "Methodenname erwartet".

Hat jemand Erfahrung damit? Ich bin ziemlich neu bei anonymen Funktionen.

EDIT: Wie hier angefordert ist der Code, der nicht kompiliert, ich entschuldige mich, wenn ich nicht klar war.

Expression<Func<int, string[], bool>> predicate = (i, x) => x.Any(i.ToString().Equals); 
user.Company += (from c in context.Tbl_Institute 
       where (predicate(c.Institute_ID,values)) 
       select c.Institute_Title + ",").ToString(); 
+1

Ich sehe nichts offensichtlich falsch in dem winzigen Code, den Sie geteilt haben. Klingt wie etwas falsch mit der Deklaration von "Prädikat". Aber ohne ein gutes [mcve], das das Problem zuverlässig reproduziert, kann ich nicht auf etwas Bestimmtes hinweisen. Bitte verbessern Sie Ihre Frage. –

+0

Diese Funktion kompiliert nicht selbst, wenn die Funktion in einen Ausdruck geändert wird. Nicht sicher, wie jeder andere Code hilft, wenn es explizit diese Funktion ist, die den Fehler zurückgibt. –

+1

@AnthonyDrury - Ihr Code sieht ein bisschen seltsam aus. Sie rufen '.ToString()' auf einem 'IQueryable <>'. Sie müssen uns wirklich eine [mcve] zur Verfügung stellen. Das würde bedeuten, uns die minimale Menge an Code zur Verfügung zu stellen, die wir kopieren, einfügen und kompilieren könnten, um den Fehler zu sehen, den Sie bekommen. – Enigmativity

Antwort

1

Sie fragen Entity Framework ein bisschen zu viel, hier. Ich verstehe nicht, warum Sie diese Matching-Funktion außerhalb der LINQ-Abfrage behalten. Können Sie erklären, warum Sie das tun? Ich denke, EF kämpft damit.

Hier ist ein Stück Code, das ich denke, funktionieren sollte:

List<string> values = new List<string> { "1", "2", "3", "4" }; 

var matchingInstitutesNames = context 
    .Tbl_Institute 
    .Where(x => values.Contains(x.Institute_Id.ToString())) 
    .Select(x => x.Institute_Title) 
    .ToList(); 

var joinedInstitutesNames = string.Join(",", matchingInstitutesNames); 
user.Company += joinedInstitutesNames; 

Wenn das nicht funktioniert, Sie könnten Ihre Liste der string auf eine Liste von int so ist EF nicht müssen konvertieren möchten Gießen Sie von int bis string.

+0

Hallo! Ja, ich kam gerade mit einer Lösung, die sehr nahe daran ist.Changing meine wo zu values.Any (s => c.Institute_ID.ToString(). Entspricht (s)) Dies kompiliert, aber ich bekomme eine seltsame Wert zurückgegeben, die eine massive Abfrage und nicht die tatsächliche Antwort scheint. Ich werde eine neue Frage für Sie öffnen, wenn Sie es überprüfen möchten. –

+0

Habe es einfach ausprobiert und es hat perfekt funktioniert! Vielen Dank! –

+1

glücklich es hat dir geholfen. –