C# 使用一个属性而不是整个对象进行区分
我正在使用C#/Entity框架,并试图使用C# 使用一个属性而不是整个对象进行区分,c#,.net,entity-framework,C#,.net,Entity Framework,我正在使用C#/Entity框架,并试图使用Distinct(),但我找不到正确的语法 我所拥有的: context .Orders .Select(o => o.User) .Distinct(); 最后一个查询是对整个用户对象执行一个独特的查询: 选择 [Distinct1].[ID]作为[ID], [Distinct1].[Name]作为[Name], [Distinct1].[Email]作为[Email], (...) 我需要的是仅使用一个属性(如名称)进行区分。最后的查询类
Distinct()
,但我找不到正确的语法
我所拥有的:
context
.Orders
.Select(o => o.User)
.Distinct();
最后一个查询是对整个用户对象执行一个独特的查询:
选择
[Distinct1].[ID]作为[ID],
[Distinct1].[Name]作为[Name],
[Distinct1].[Email]作为[Email],
(...)
我需要的是仅使用一个属性(如名称)进行区分。最后的查询类似于:
选择
[ID],
[Distinct1].[Name]作为[Name],
[电邮],
(...)
如果我在Distinct()
之前使用ToList()
,我可以在Distinct()
内部使用EqualityComparer
,但我试图避免它,因为我有性能问题,因为它将大量信息加载到内存中,而不是在数据库中进行过滤。尝试使用比较器:
public class UserComparer : IEqualityComparer<User>
{
public bool Equals(User x, User y)
{
return (x.Name == y.Name);
}
public int GetHashCode(User user)
{
return user.GetHashCode();
}
}
context.Orders.Select(o => o.User).Distinct(new UserComparer());
公共类用户比较器:IEqualityComparer
{
公共布尔等于(用户x、用户y)
{
返回(x.Name==y.Name);
}
public int GetHashCode(用户)
{
返回user.GetHashCode();
}
}
Select(o=>o.User).Distinct(newusercomparer());
我的猜测是实体框架应该基于名称而不是整个对象。检查MoreLinq,(DistinctBy:)