Я использую ENtity Framework с Code First. У меня есть список объектов, которые передаются в функцию, которая будет использовать функцию Intersect из DatabaseContext и передавать объекты. Это не работает. Вот код:
public void BeginProcess(IEnumerable<Contract> selectedContracts)
{
DatabaseContext dc= new DatabaseContext();
var contract = dc.Contracts.Intersect<Contract>(selectedContracts, new ContractComparer());
foreach (var item in contract)
{
item.BatchNumber = 10;
}
//odc.Contracts.Intersect(selectedContracts).ToList().ForEach(x=>x.BatchNumber = batchNum);
odc.SaveChanges();
}
Я создал класс ContractComparer, который реализует IEqualityComparer:
public class ContractComparer : IEqualityComparer<Contract>
{
#region IEqualityComparer<Contract> Members
public bool Equals(Contract x, Contract y)
{
//Check whether the compared objects reference the same data.
if (Object.ReferenceEquals(x, y)) return true;
//Check whether any of the compared objects is null.
if (Object.ReferenceEquals(x, null) || Object.ReferenceEquals(y, null))
return false;
return x.OID == y.OID;
}
public int GetHashCode(Contract obj)
{
return base.GetHashCode();
}
#endregion
}
Я получаю ошибку:
LINQ to Entities не распознает метод 'System.Linq.IQueryable 1[Contract] Intersect[Contract](System.Linq.IQueryable
1 [Contract], System.Collections.Generic.IEnumerable 1[Contract], System.Collections.Generic.IEqualityComparer
1 [Contract])', и этот метод нельзя преобразовать в магазинное выражение.
Есть идеи? Благодарю.