2013-04-04 18 views
6

Io chiamo una data nel mio database usando il lavoro di frame entità. ma il mio codice qui sotto che dà questo erroreLINQ to Entities non riconosce il metodo e questo metodo non può essere tradotto in un'espressione di negozio

LINQ alle Entità non riconosce il metodo metodo "SchoolBreifcase.Compliance get_Item (Int32)" e questo metodo non può essere tradotto in un'espressione di archivio.

Ecco il mio codice completo

FinancialCompliance financialCompliance = new FinancialCompliance(); 
      List<Compliance> compliance = null; 
      if (HttpContext.Current.User.IsInRole("SchoolAdmin")) 
      { 

       compliance = datamodel.Compliances.Where(u => u.UserId == userId).OrderBy(c => c.AddedDate).ToList(); 

      } 
      if (HttpContext.Current.User.IsInRole("User")) 
      { 
       compliance = datamodel.Compliances.Where(u => u.VerifierId == userId || u.OwnerId == userId).OrderBy(c => c.AddedDate).ToList(); 
      } 
      if (compliance != null) 
      { 
       for (int i = 1; i < compliance.Count; i++) 
       { 
        financialCompliance = datamodel.FinancialCompliances.Where(f => f.ComplianceId == compliance[i].ComplianceId).SingleOrDefault(); 
        if (compliance.Count == i) 
        { 
         return financialCompliance; 
        } 
       } 
      } 
      return financialCompliance; 
     } 

Questa linea dà questo errore:

financialCompliance = datamodel.FinancialCompliances.Where(f => f.ComplianceId == compliance[i].ComplianceId).SingleOrDefault(); 

non aiuta impilare più di risposta flusso ho trovato alcune risposte in questo sito overflow dello stack per

LINQ to Entities does not recognize the method

ecc. Ma non mi aiuta. Così ho fatto questa domanda. Si prega di non chiudere nessuno questa domanda per il motivo di già chiesto

risposta

9

È necessario creare una variabile per fare riferimento a compliance[i].ComplianceId quindi utilizzare in un secondo momento.

for (int i = 1; i < compliance.Count; i++) 
{ 
    var complianceId = compliance[i].ComplianceId; 
    financialCompliance = datamodel.FinancialCompliances.Where(f => f.ComplianceId == complianceId).SingleOrDefault(); 
    if (compliance.Count == i) 
    { 
     return financialCompliance; 
    } 
} 
+0

Grazie Satpal, questa è una risposta molto utile. Questo mi stava facendo impazzire! – bazza

+0

Cosa succede se si accede a qualcosa come compliance [f.Id] .ComplianceId dipende dal parametro dell'espressione lambda – router

10

Si tratta dello compliance[i].ComplianceId. Creare una variabile prima:

var id = compliance[i].ComplianceId; 

financialCompliance = datamodel.FinancialCompliances 
         .Where(f => f.ComplianceId == id).SingleOrDefault(); 
Problemi correlati