gpt4 book ai didi

c# - 使用具有非原始类型的 LINQ 相交函数

转载 作者:行者123 更新时间:2023-11-30 21:14:39 25 4
gpt4 key购买 nike

我正在使用 ENtity Framework 和 Code First。我有一个正在传递给函数的对象列表,该函数将使用 DatabaseContext 中的 Intersect 函数并传递对象。它不工作。这是代码:

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();

}

我创建了一个实现 IEqualityComparer 的 ContractComparer 类:

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.IQueryable1[Contract] Intersect[Contract](System.Linq.IQueryable1[Contract], System.Collections.Generic.IEnumerable 1[Contract], System.Collections.Generic.IEqualityComparer1[Contract])' 方法,并且此方法无法转换为存储表达式。

有什么想法吗?谢谢。

最佳答案

怎么样;

var contract = dc.Contracts
.Where(c => selectedContracts.Select(x => x.OID).ToList().Contains(c.OID));

关于c# - 使用具有非原始类型的 LINQ 相交函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6127800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com