【发布时间】:2017-06-15 11:49:18
【问题描述】:
我试图让 except 方法像这个答案一样工作: https://stackoverflow.com/a/3944821/169714
第一次尝试:
var housesToRemove = db.Houses.Except(houses).ToList();
第二次尝试:
var housesToRemove = db.Houses.Where(h =>
!houses.Any(h2 => h2.Code.Equals(h.Code) && h2.OperatorId == h.OperatorId)).ToList();
我的 Houses 类已覆盖 Equals:
public override bool Equals(object obj)
{
var item = obj as House;
if (item == null)
return false;
return this.Code == item.Code && this.OperatorId == item.OperatorId;
}
public override int GetHashCode()
{
return this.ID.GetHashCode();
}
两个选项都抛出:
System.NotSupportedException: '无法创建'House' 类型的常量值。此上下文仅支持原始类型或枚举类型。'
我使用它的部分代码:
using (var db = new HouseContext())
{
var housesToRemove = db.Houses.Where(h => !houses.Any(h2 => h2.Code.Equals(h.Code) && h2.OperatorId == h.OperatorId)).ToList();
foreach (var htr in housesToRemove)
{
Console.WriteLine(htr); // I have also overwritten ToString() from House
}
housesToRemove.ForEach(x => x.IsListed = false);
db.SaveChanges();
}
【问题讨论】: