区分使用一个属性而不是整个对象

时间:2015-02-11 01:39:36

标签: c# .net entity-framework

我正在使用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(),但我试图避免它,因为我是有性能问题,因为它将大量信息加载到内存中而不是在数据库中进行过滤。

1 个答案:

答案 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,而不是整个对象。