2017-11-25 14 views
1

をサポートしている私は、次のエラー受けています:このコードが実行されるとLINQのは、モデルの値型を作成することができませんでし受け、唯一のプリミティブ型または列挙型が

{"Unable to create a constant value of type 'OnlineContactChangeTableModel'. Only primitive types or enumeration types are supported in this context."}

を:

List<OnlineContactChangeTableModel> ret = new List<OnlineContactChangeTableModel>(); 
    ret = db.Address.AsNoTracking().Where(a => a.IsProcessed == false && 
              a.IsDeleted == false).ToList() 
      .Select(aa => new OnlineContactChangeTableModel(aa)).ToList(); 
    ret.AddRange(db.Email.AsNoTracking().Where(a => !ret.Any(rr => rr.Id == a.Id) && 
              a.IsProcessed == false && 
              a.IsDeleted == false).ToList() 
      .Select(aa => new OnlineContactChangeTableModel(aa)).ToList()); 

AddRange行にエラーが発生しています。この行にヒットしたとき、retにはレコードがあり、IdフィールドはいずれもNULLではありません。 Idフィールドは人物IDに相当します。私はリストの中でそれらを1回だけ欲しい。

答えて

0

私はIDの追跡を維持するために、新しいリストを作成し、それは私の問題を修正:

List<OnlineContactChangeTableModel> ret = new List<OnlineContactChangeTableModel>(); 
List<int> lIds = new List<int>(); 
ret = db.Address.AsNoTracking().Where(a => a.IsProcessed == false && 
             a.IsDeleted == false).ToList() 
     .Select(aa => new OnlineContactChangeTableModel(aa)).ToList(); 

lIds.AddRange(ret.Select(s => s.Id).ToList(); 

ret.AddRange(db.Email.AsNoTracking().Where(a => !lIds.Any(rr => rr == a.Id) && 
             a.IsProcessed == false && 
             a.IsDeleted == false).ToList() 
     .Select(aa => new OnlineContactChangeTableModel(aa)).ToList()); 
0

ちょうどその時、それは動作します、.AsNoTracking().ToList()を追加!

ret = db.Address.AsNoTracking() 
       .ToList() 
       .Where(a => a.IsProcessed == false && a.IsDeleted == false) 
       .ToList() 
       .Select(aa => new OnlineContactChangeTableModel(aa)) 
       .ToList(); 
関連する問題