2016-07-19 3 views
1

Ich habe ein großes Problem mit meinem Linq-AbfrageDbExpressionBinding erfordert einen Eingabeausdruck mit einer Auflistung ResultType. Parametername: Eingang

  var t = from tl in _GxEntities.T_L 
          join td in _GxEntities.T_D on (int)tl.fld_rdRequestfk equals td.fld_rqID_pk 
          join tpd in _GxEntities.T_P_D on (int)td.fld_rqID_pk equals tpd.fld_pdRequest_fk         
          where tpd.fld_pdda == null 
           && tpd.fld_pdSU_fk == tl.fld_rdSU_fk 
           && td.fld_rqstatus != 1 
           && tl.fld_rcid != null 
           && tl.loc_id == UsrProfilService.loc_id 
           && tl.fld_rcid.Any(x=> tblRvGxFr.Select(c=>c.Nte).Contains(x.ToString())) 
          group tl by new 
          { 
           tl.fld_rcid, 
           tl.fld_rdSU_fk, 
           tl.fld_rdtRequested_Q, 
           tl.loc_id 
          } into q 
          select new RVSyntheseDetailModel() 
          { 
           RC_ID = q.Key.fld_rcid, 
           SU = (int)q.Key.fld_rdSU_fk, 
           Ts = (int)q.Sum(k => k.fld_rdtRequested_Q), 
           LOC_ID = (short)q.Key.loc_id 
          }; 

     return t.ToList(); 

Wenn ich && tl.fld_rcid.Any(x=> tblRvGxFr.Select(c=>c.Nte).Contains(x.ToString())) kommentieren diesen Teil habe ich kein Problem. tblRvGxFr ist von einer anderen Entitäten und sieht wie folgt aus:

var dateLimit = DateTime.Now.Date.AddMonths(-1); 

var tblRtvGrxFr = from tgx in _FtEntities.TL_RV_FR_GX 
where tgx.RV_D_LIM_RET > dateLimit && tgx.RV_N_IDT_DAP != null && tgx.RV_LOC_ID == SqlFunctions.StringConvert((double)UsrProfilService.loc_id) 
    select new RVSyntheseRrModel() 
    { 
     Nte = tgx.RV_ETET, 
     Tr = tgx.RV_TR, 
     Filiere = tgx.RV_T_PRD, 
     Lib_art = tgx.RV_L_ART, 
     SU = tgx.RV_N_IDT_DAP, 
     Qte_demand = (int?)tgx.RT_Q_DEM_RET ?? 0, 
     Ord = 0, 
     Tcs = 0, 
     AfA = 0, 
     PrA = 0, 
     Exped = 0, 
     Loc_Id = tgx.RV_LOC_ID, 
     Reason = tgx.RV_REASON 
    }; 

Können Sie mir helfen? Warum erhalte ich diesen Fehler "DbExpressionBinding benötigt einen Eingabeausdruck mit einer Auflistung ResultType. Parametername: input"?

Und wenn ich diesen Zustand zu ändern: & & tblRvGxFr.Select (i => i.Nte) .Contains (tl.fld_rcid) Ich habe diesen Fehler: Kann nicht den Typ ‚GX.ViewModels.RVSyntheseRrModel verarbeiten [ ] ', weil es keine Zuordnung zur Werteebene hat.

+0

Was ist der ** Typ ** des Feldes 'fld_rcid'? Auch ist dies LINQ to SQL oder LINQ to Entities? –

+0

Fld_Rcid ist ein String und das ist Linq zu Entities –

+0

Ok. Was versuchst du zu erreichen? (A) 'fld_rcid' enthält irgendein' nte', (B) irgendein 'nte' entspricht' fld_rcid' (C) irgendein 'nte' enthält' fld_rcid ' –

Antwort

1

Normalerweise würden Sie so etwas wie dieses

&& tblRvGxFr.Any(c => c.Nte.Contains(tl.fld_rcid)) 

jedoch LINQ to Entities verwendet keine Abfragen unterstützen, die verschiedene DbContext s. So müssen Sie die Nte s in eine lokale Liste greifen/array

var nteList = tblRvGxFr.Select(c => c.Nte).ToList(); 

und diese dann statt:

&& nteList.Any(nte => nte.Contains(tl.fld_rcid)) 

Hoffe, dass die Nte Liste ist nicht groß, weil sonst die SQL-Abfrage recht sein wird, groß und ineffizient. Aber AFAIK gibt es keine andere Multi-Kontext-Lösung.

+0

Vielen Dank für Ihre Hilfe. Nte ist eine große Liste –

+0

Schade. Gibt es eine Chance, ein und denselben 'DbContext' zu verwenden? –

+0

Nein, es ist unmöglich ... vorher benutzte ich eine Ansicht, aber es war zu langsam zum Laden, deshalb hat mein Chef mich gebeten, es mit linq zu codieren ... jetzt versuche ich alle Unterabfragen zu vereinen und ich kämpfe mit den Grenzen des Entity Framework :( –

Verwandte Themen