2017-05-16 4 views
-1

Ich versuche, ein wählen zu tun, wo die letzten beiden Buchstaben eines ID-Übereinstimmung, was in einem String enumerable an die Methode übergeben, aber ich; m immer die Syntax falschEntity Framework und LINQ-Syntax

Ich versuche

setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper().Any(x => setIds.Contains(x.ToString())) 

Heres die ganze Methode

im Moment, um es in dieser Richtung etwas nach unten
var tupleResponse = (from setHeaders in _woEntities.SETHEADER 
          join setDetails in _woEntities.SETDETAIL on setHeaders.SET_ID equals setDetails.SET_ID 
          join workOrders in _woEntities.B1PERMIT on new 
          { 
           setDetails.B1_PER_ID1, 
           setDetails.B1_PER_ID2, 
           setDetails.B1_PER_ID3 
          } equals new { workOrders.B1_PER_ID1, workOrders.B1_PER_ID2, workOrders.B1_PER_ID3 } 
          where setDetails.REC_STATUS == "A" && /*setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper().Any(x => setIds.Contains(x.ToString()))*/ 
            (setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper() == "OS" || 
            setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper() == "TR") && 
            workOrders.B1_APPL_STATUS.ToLower() == "open" 
          select new 
          { 

           setHeaders.SET_ID, 
           setHeaders.SET_TITLE, 
           workOrders.B1_ALT_ID 
          }).AsEnumerable() 
      .Select(x => Tuple.Create(x.SET_ID, x.SET_TITLE, x.B1_ALT_ID)) 
      .ToList(); 

Antwort

0

ich denke, Ihre neuesten Tests besser funktionieren würde, mit .EndsWith

setHeaders.SET_ID.ToUpper().EndsWith("TR") 

LINQ können oft nicht .Contains für eine lokale Sammlung übersetzen, aber wenn es könnte ich dich nicht denken würde, brauchen .Any oder .ToString() (Sie wissen, es ist ein String).

Mai

setIds.Contains(setHeaders.SET_ID.Substring(setHeaders.SET_ID.Length - 2).ToUpper()) 

nicht funktionieren, wenn es nicht, Sie in LINQKit und PredicateBuilder zu suchen.

+0

Sorry ich denke, wir können über verschiedene Punkte sprechen, ich möchte die Funktion erweitern, so dass ich nicht "TR" oder "OS" hartcodieren muss Ich würde gerne in der Lage sein, in Sammlung von "Endungen" (eine Namenskonvention, die das Unternehmen verwendet, um verschiedene Gruppen zu unterscheiden) und in der Lage sein, das Ende von SET_ID mit einem Wert in dieser Liste abzugleichen – Damage

+0

Können Sie die Aussage versuchen, um zu sehen, ob es mit Ihrem LINQ-Anbieter funktioniert ? Wenn nicht, dann kommt PredicateBuilder rein. – NetMage

+0

ahhhhh Dummy, tut mir leid, das war mein Fehler, ich habe das falsch gelesen. Dieser Code scheint zu funktionieren! danke setIds.Contains (setHeaders.SET_ID.Substring (setHeaders.SET_ID.Length - 2) .ToUpper()) – Damage