我需要根据对象的属性类别对对象列表进行查询.我需要这些组的顺序不是我在许多其他样本中看到的通常的字母顺序.我正在使用我从其他地方带来的一个例子.如何基于HomeProvince生成Person对象列表,但是根据此排序:
安大略省,魁北克,艾伯塔省,曼尼托巴省,不列颠哥伦比亚省 每组中的排序无关紧要.
Person[] people = new Person[]
{
new Person() { FirstName = "Tony", LastName = "Montana", Age = 39, HomeProvince = "Ontario" },
new Person() { FirstName = "Bill", LastName = "Smith", Age = 23, HomeProvince = "Ontario" },
new Person() { FirstName = "Jane", LastName = "Doe", Age = 23, HomeProvince = "Alberta" },
new Person() { FirstName = "John", LastName = "Doe", Age = 23, HomeProvince = "Alberta" },
new Person() { FirstName = "Alex", LastName = "DeLarge", Age = 19, HomeProvince = "British Columbia" },
new Person() { FirstName = "Travis", LastName = "Bickle", Age = 42, HomeProvince = "Quebec" },
new Person() { FirstName = "Ferris", LastName = "Beuller", Age = 17, HomeProvince = "Manitoba" },
new Person() { FirstName = "Maggie", LastName = "May", Age = 23, HomeProvince = "Ontario" },
new Person() { FirstName = "Mickey", LastName = "Mouse", Age = 93, HomeProvince = "Alberta" },
new Person() { FirstName = "Frank", LastName = "Darabont", Age = 49, HomeProvince = "Ontario" }
};
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
// Provinces in the desired order
string[] provinces = { "Ontario", "Quebec", "Alberta", "Manitoba",
"British Columbia" };
var query = from province in provinces
join person in people on province equals person.HomeProvince
select person;
Run Code Online (Sandbox Code Playgroud)
那将基本上:
如果您需要按省份分组的人员,那也很容易:
var query = from province in provinces
join person in people on province equals person.HomeProvince
into grouped
select new { Province = province, People = grouped.ToList() };
Run Code Online (Sandbox Code Playgroud)
另一个选择是创建从省到"优先级"的映射,然后按顺序排序.这实际上取决于您需要的输出.
| 归档时间: |
|
| 查看次数: |
414 次 |
| 最近记录: |