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());