2013-04-04 15 views
6

エンティティフレームワークを使用してデータベース内の日付を呼び出します。このエラーを与える私の下のコードLINQ to Entitiesはメソッドを認識せず、このメソッドをストア式に変換することはできません

LINQ to Entitiesメソッド 'SchoolBreifcase.Compliance get_Item(Int32)'メソッドを認識せず、このメソッドをストア式に変換することはできません。

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

は、私は、このスタックオーバーフローのサイトでいくつかの答えを見つけていフロー答え を超えるスタック助けにはならない。ここで

は私の完全なコード

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; 
     } 

は、この行は、そのエラーを与えることです

LINQ to Entities does not recognize the method

など。しかし私には助けになりません。私はこの質問をしました。すでに質問されているため、この質問を終了しないでください。

答えて

9

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

Satpalさん、ありがとう、これは非常に便利な回答です。これは私にナッツを運転していた! – bazza

+0

コンプライアンス[f.Id] .ComplianceId、つまりラムダ式のパラメータに依存するようなものにアクセスするとどうなりますか? – router

10

compliance[i].ComplianceIdです。最初の変数を作成します:あなたは、その後compliance[i].ComplianceIdを参照し、後でそれを使用する変数を作成する必要が

var id = compliance[i].ComplianceId; 

financialCompliance = datamodel.FinancialCompliances 
         .Where(f => f.ComplianceId == id).SingleOrDefault(); 
関連する問題