Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用一个属性而不是整个对象进行区分_C#_.net_Entity Framework - Fatal编程技术网

C# 使用一个属性而不是整个对象进行区分

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], (...) 我需要的是仅使用一个属性(如名称)进行区分。最后的查询类

我正在使用C#/Entity框架,并试图使用
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:)