我有一个我想要与Linq分组的对象列表。对象类型是GroupRating。我想用他们的“Params”属性对它们进行分组。
public class GroupRating
{
public long Id { get; set; }
public Parameters Params { get; set; }
}
public class Parameters
{
public int CarrierId { get; set; }
public int CustomerId { get; set; }
}
事情就是这样: (即,我只得到一个包含所有ID的组)
var myList = new List<GroupRating>();
... blahblah code...
var groupedList = myList.GroupBy(i => new {
CarrierId = i.Params.CarrierId,
CustomerId = i.Params.CustomerId
}, i => i.Id).ToArray();
但这不起作用: (即,我得到了与Ids一样多的组)
var myList = new List<GroupRating>();
... blahblah code...
var groupedList = myList.GroupBy(i => new Params {
CarrierId = i.Params.CarrierId,
CustomerId = i.Params.CustomerId
}, i => i.Id).ToArray();
知道为什么吗?
由于
答案 0 :(得分:6)
您的Equals(object)
必须正确覆盖GetHashCode()
和new Params { ... }
。否则两个struct
即使看起来相同也不会“相等”。
匿名类型会自动覆盖这两种方法。
您也可以使用class
代替struct
,因为Equals(object)
使用GetHashCode()
中存在的System.ValueType
和struct
覆盖}。如果您选择private set;
,请考虑将类型设置为 immutable ,即将属性设置为只读(或使用#-*-coding:utf8;-*-
#qpy:2
#qpy:kivy
from kivy.app import App
from kivy.uix.button import Button
class TestApp(App):
def build(self):
# display a button with the text : Hello QPython
return Button(text='Hello QPython')
TestApp().run()
)。
答案 1 :(得分:0)
你必须使用类或匿名类型.Params不是class.You可以使用它。
试试这个:
var groupedList = myList.GroupBy(i => new Parameters {
CarrierId = i.CarrierId,
CustomerId = i.CustomerId
}, i => i.Id).ToArray();