2016-12-28 9 views
1

を投げ、私はこれらのモデル更新多対多の関係は、ラムダ式のエラー

public class Admin 
{ 
    public Admin() 
    { 
     this.course = new HashSet<Courses>(); 
    } 

    [Key] 
    public int ID { get; set; } 
    public string LoginName { get; set; } 

    public virtual ICollection<Courses> course { get; set; } 
} 

public class Courses 
{ 
    public Courses() 
    { 
     this.admin = new HashSet<Admin>(); 
    } 

    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Admin> admin { get; set; } 
} 

を持っており、これは私がここで問題に直面

public ActionResult Admins(Admin rec, IList<int> CourseId) 
{  
    if (rec.ID > 0) // edit 
    { 
     var dbrec = db.Admins.Include("Courses").Where(s => s.ID == rec.ID).FirstOrDefault<Admin>(); 
     dbrec.DisplayName = rec.DisplayName; 

     var deletedCourses = dbrec.course.Except(rec.course, cours => cours.ID).ToList<Courses>(); 
    } 
} 

を更新するために、私のコントローラメソッドでありますこのコード行はcours => cours.IDです。それはデリゲート型

ではないので

エラーメッセージ

は、私はこのエラーを取得するなぜ誰も私を教えてもらえたIEqualityComparerを入力するラムダ式を変換することができませんか?

私は基本的に同様Except()見て、このチュートリアルに

http://www.entityframeworktutorial.net/EntityFramework4.3/update-many-to-many-entity-using-dbcontext.aspx

+0

「Except()」を使用して間違っています。 'var deletedCourses = dbrec.course.Except(rec.course).ToList ();'これですべての_except_ 'rec'を取得します –

答えて

1

を以下のよ:

public static IEnumerable<TSource> Except<TSource>(
this IEnumerable<TSource> first, 
IEnumerable<TSource> second) 

ですから、これは以外のすべてのcourseを取得

var deletedCourses = dbrec.course.Except(rec.course).ToList<Courses>(); それを使用することができます

なぜエラーが発生しますか?シンプルなあなたの代わりにあなたや私たちは二つのリストから値を比較し、第二のリストに存在しないもののリストからエンティティを返すために、次の拡張メソッドを使用しているExcept()方法

public static IEnumerable<T> Except<T, TKey>(this IEnumerable<T> items, IEnumerable<T> other,                   Func<T, TKey> getKey) 
{ 
    return from item in items 
      join otherItem in other on getKey(item) 
      equals getKey(otherItem) into tempItems 
      from temp in tempItems.DefaultIfEmpty() 
      where ReferenceEquals(null, temp) || temp.Equals(default(T)) 
      select item; 

} 

ための拡張 を使用する上記のコードを使用する必要があります。渡された関数に基づいて行われた比較:

+0

ありがとう、 – Sarah