问题:是否可以使用具体类来执行Linq to sql Group By?
public class person{ public string name; public string State;}public class personGroup{ public string State; public personGroup(string personState) { State = personState; }}voID Main(){ var people = new List<person>(); people.Add(new person {name = "Bob",State = "Tx"}); people.Add(new person {name = "Bill",State = "Tx"}); people.Add(new person {name = "Tracy",State = "Tx"}); people.Add(new person {name = "Steve",State = "Md"}); people.Add(new person {name = "Kelly",State = "Md"}); var groupedPeople = people.GroupBy (p => p.State ); groupedPeople.Count().Dump();//Returns 2 var morePeople = people.GroupBy (p => new personGroup(p.State) ); morePeople.Count().Dump();//Returns 5}解决方法 当没有提供自定义IEqualityComparer时,GroupBy方法使用EqualityComparer< T> .Default来比较有问题的项目(您没有提供).这将基于IEquatable< T>的实现.有问题的类型T,如果有,那么它将只使用该类型的object.Equals和object.GetHashCode.
您的自定义类型不提供任何实现,它完全依赖于object中定义的实现,对于引用类型,它基于对象的引用.您创建的每个personGroup对象都有不同的引用,因此不同.
匿名类型不使用默认的相等behvaior;它们覆盖Equals和GetHashCode的定义,以取决于它们所代表的每个属性的标识.
如果要使用自己的自定义类型进行分组,并且默认的等同语义不是您想要的,则需要提供自定义IEqualityComparer实现,或者覆盖相关类型的Equals和GetHashCode.
总结以上是内存溢出为你收集整理的c# – Linq to Sql Group By Class全部内容,希望文章能够帮你解决c# – Linq to Sql Group By Class所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)