我正在使用實體框架4.0,並試圖使用我的上下文對象中的一個對象集的「包含」功能。這樣做,我編寫了一個比較器類:IEqualityComparer異常
public class RatingInfoComparer : IEqualityComparer<RatingInfo>
{
public bool Equals(RatingInfo x, RatingInfo y)
{
var a = new {x.PlugInID,x.RatingInfoUserIP};
var b = new {y.PlugInID,y.RatingInfoUserIP};
if(a.PlugInID == b.PlugInID && a.RatingInfoUserIP.Equals(b.RatingInfoUserIP))
return true;
else
return false;
}
public int GetHashCode(RatingInfo obj)
{
var a = new { obj.PlugInID, obj.RatingInfoUserIP };
if (Object.ReferenceEquals(obj, null))
return 0;
return a.GetHashCode();
}
}
當我嘗試使用比較器與此代碼:
public void SaveRatingInfo2(int plugInId, string userInfo)
{
RatingInfo ri = new RatingInfo()
{
PlugInID = plugInId,
RatingInfoUser = userInfo,
RatingInfoUserIP = "192.168.1.100"
};
//This is where i get the execption
if (!context.RatingInfoes.Contains<RatingInfo>(ri, new RatingInfoComparer()))
{
//my Entity Framework context object
context.RatingInfoes.AddObject(ri);
context.SaveChanges();
}
}
我得到一個execption:
「LINQ到實體不承認方法'布爾Contains [RatingInfo](System.Linq.IQueryable 1[OlafCMSLibrary.Models.RatingInfo], OlafCMSLibrary.Models.RatingInfo, System.Collections.Generic.IEqualityComparer
1 [OlafCMSLibrary.Models.RatingInfo])'方法,並且他的方法不能被轉換成存儲表達式。「
由於我不熟練使用linQ和Entity Framework,我可能會在「GetHashCode」函數中使用「var」,或者一般來說會犯一個錯誤。
如果我的錯誤是明確的,你告訴我:)它不會停止我的項目!但對於我來說,理解爲什麼一個簡單的比較器不起作用至關重要。
由於 亞倫
謝謝! 關於「支持和不支持的LINQ方法」的鏈接似乎回答了我的問題。它不支持這是獲得此特定例外的好理由:) 謝謝, Aharale – Aharon 2010-06-29 14:51:10