IEnumerable<IGrouping<StatusType, Request>> group = requests.GroupBy(r=> r.StatusType );


当请求(List<Requests>)来自EntityFramework/db时,上述分组功能适用。
将请求的分配从db direct更改为Web服务时,
分组未按预期进行。

仔细研究一下,我发现从数据库与网络(通过此post得出)来的StatusType的哈希或相等性是不同的。

从帖子的accepted answer中,我可以通过重写来绕过/(解决?)问题。

public class StatusType : IEquatable<int>
{   // omitted other crucial equality comparison components.
    // but for brevity..
    public override int GetHashCode()
    {
        return Id;
    }
}


尽管覆盖StatusType可以部分解决问题,
我觉得这很冒险


我不是代码库的作者。
有许多引用提到StatusType增加潜力
即将发生的故障。


我的问题,

有没有一种方法可以按StatusTypeId(int)进行分组

requests.groupBy(r=> r.StatusTypeId) // returns IEnumerable<IGrouping<int,Rquest>>


但是得到StatusType吗?

IEnumerable<IGrouping<StatusType,Rquest>>

最佳答案

StatusType定义比较器:

public class StatusTypeComparer : IEqualityComparer<StatusType>
{
    public bool Equals(StatusType x, StatusType y)
    {
        return x.Id == y.Id;
    }

    public int GetHashCode(StatusType obj)
    {
        return obj.Id.GetHashCode();
    }
}


将其传递给GroupBy方法:

IEnumerable<IGrouping<StatusType, Request>> group =
                    requests.GroupBy(r => r.StatusType,
                                          new StatusTypeComparer());

07-26 04:02