我正在使用C#/ Entity Framework并尝试仅使用一个属性Distinct()
,但我找不到正确的语法。
我有什么:
context
.Orders
.Select(o => o.User)
.Distinct();
最终查询与整个User对象区别开来:
SELECT
[Distinct1].[ID] AS [ID],
[Distinct1].[Name] AS [Name],
[Distinct1].[Email] AS [Email],
(...)
我需要的只是使用一个属性,比如Name。最终的查询类似于:
SELECT
[ID],
[Distinct1].[Name] AS [Name],
[Email],
(...)
如果我在ToList()
之前使用Distinct()
,我可以在EqualityComparer
内使用Distinct()
,但我试图避免它,因为我是有性能问题,因为它将大量信息加载到内存中而不是在数据库中进行过滤。
答案 0 :(得分:0)
尝试使用比较器:
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());
我的猜测是实体框架应该基于Name
,而不是整个对象。