gpt4 book ai didi

c# - EF 不同 (IEqualityComparer) 错误

转载 作者:可可西里 更新时间:2023-11-01 07:51:28 26 4
gpt4 key购买 nike

早上好!

给定:

public class FooClass
{
public void FooMethod()
{
using (var myEntity = new MyEntity)
{
var result = myEntity.MyDomainEntity.Where(myDomainEntity => myDomainEntity.MySpecialID > default(int)).Distinct(new FooComparer);
}
}

}

public class FooComparer : IEqualityComparer<MyEntity.MyDomainEntity>
{
public bool Equals(MyEntity.MyDomainEntity x, MyEntity.MyDomainEntity y)
{
return x.MySpecialID == y.MySpecialID;
}

public int GetHashCode(MyEntity.MyDomainEntity obj)
{
return obj.MySpecialID.GetHashCode();
}
}

这会编译,但在运行时我会得到一个Linq to Entity could not translate Comparer-Exception。
有什么建议吗?

最佳答案

如果您要提供自己的比较,则需要执行 Distinct调用 .NET 代码。为确保发生这种情况,请使用 AsEnumerableIQueryable<T>进入IEnumerable<T> :

var result = myEntity.MyDomainEntity
.Where(myDomainEntity => myDomainEntity.MySpecialID > default(int))
.AsEnumerable()
.Distinct(new FooComparer());

当然,那时您将从数据库中提取更多数据。另一种方法是对数据进行分组:

var result = from entity in myEntity.MyDomainEntity
where entity.MySpecialID > 0
group entity by entity.MySpecialID into groups
select groups.FirstOrDefault();

这将使您获得每个 ID 遇到的第一个实体(假设我的查询功能没有让我失望)。这基本上就是 Distinct 所做的,但它都在数据库中。

(请注意 future 的读者:调用 First()FirstOrDefault() 更有意义,但显然这不起作用。)

关于c# - EF 不同 (IEqualityComparer) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1010944/

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