2011-07-13 6 views
0

、私は私のデータベースにストアドプロシージャを持っていると私はそのような何かをする必要があり、私はEFモデルにマッピングして、私は関数インポートEFストアドプロシージャ

を追加します。

 MyDataContext db= new MyDataContext(); 
     var x = from all in db.Allergies 
       select new MyAllergy 
       { 
        Name = all.Name, 
        Id = all.Id, 
        user = db.GetUser(all.ChangeInfo.CreatedBy).FirstOrDefault() 
       }; 

この例外がスロー:エンティティへ

LINQは 'System.Data.Objects.ObjectResult 1[System.String] GetUser(System.Nullable 1 [System.Int64])' 方法、及びこの方法の方法を認識しませんはストア式に変換できません。このものの

が正常に動作します:var user = db.GetUser(1).FirstOrDefault()

編集:私は同様の問題があった

public class MyAllergy 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public string User { get; set; } 
    } 
public class Allergy 
    { 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public ChangeInfo ChangeInfo { get; set; } 
    } 
public class ChangeInfo 
    { 
     public long CreatedBy { get; set; } 
    } 

答えて

0

。 EFはLINQ式に基づいて式ツリーを作成し、all.ChangeInfo.CreatedByを変換できず、文字列として渡します。そのため、文字列/長形式に関する例外が発生します。

私がやったことは、すべてを取得することです.ChangeInfo.CreatedBy値を前もって取得します。私の場合はもっと簡単でした。あなたのケースでは、通常のforeachループ:(

何かこのように行くかもしれない:

var myItems = new List<MyAllergy>(); 

    foreach (var item in db.Allergies) 
    { 
     var createdBy = item.ChangeInfo.CreatedBy; 

     myItems.Add(new MyAlergy {Name = item.Name, Id = item.Id, user = db.GetUser(createdBy).FirstOrDefault()}); 
    } 
+0

が、私はメモリにすべてのデータを取得する必要はありません。 – Mandoleen

関連する問題