【发布时间】:2017-12-27 17:48:27
【问题描述】:
我有一组从我们的 API 返回的帐户,这些帐户具有以下数据结构。
Accounts[] accounts = [
{
AccountNumber: 0000000001,
PrimaryPerson: Virginia,
PrimaryPersonNumber: 0001,
PersonRoleCode: "OWN",
PersonRoleDescription: "Owner",
RoleOrder: 1
PersonRoles: [
{
AccountRoleCode: "CO",
AccountRoleDescription: "Co-Owner",
PersonName: "David",
PersonNumber: 0002,
RoleOrder: 2
},
{
AccountRoleCode: "POA",
AccountRoleDescription: "Power of Attorney",
PersonName: "Clark",
PersonNumber: 0003,
RoleOrder: 6
}
]
},
{
AccountNumber: 0000000002,
PrimaryPerson: Clark,
PrimaryPersonNumber: 0003,
PersonRoleCode: "OWN",
PersonRoleDescription: "Owner",
RoleOrder: 1
PersonRoles: [
{
AccountRoleCode: "CO",
AccountRoleDescription: "Co-Owner",
PersonName: "Virginia",
PersonNumber: 0001,
RoleOrder: 2
},
{
AccountRoleCode: "POA",
AccountRoleDescription: "Power of Attorney",
PersonName: "David",
PersonNumber: 0002,
RoleOrder: 6
}
]
},
{
AccountNumber: 0000000003,
PrimaryPerson: David,
PrimaryPersonNumber: 0002,
PersonRoleCode: "OWN",
PersonRoleDescription: "Owner",
RoleOrder: 1
PersonRoles: [
{
AccountRoleCode: "CO",
AccountRoleDescription: "Co-Owner",
PersonName: "Clark",
PersonNumber: 0003,
RoleOrder: 2
},
{
AccountRoleCode: "CO",
AccountRoleDescription: "Co-Owner",
PersonName: "Virginia",
PersonNumber: 0001,
RoleOrder: 2
},
{
AccountRoleCode: "POA",
AccountRoleDescription: "Power of Attorney",
PersonName: "Virginia",
PersonNumber: 0001,
RoleOrder: 6
}
]
}
];
我需要根据RoleOrder 对Accounts 对象本身和RoleOrder 对每个PersonRole 对象在每个PersonRoles[] 索引中的PersonRole 对象进行排序。
我尝试使用 LINQ 来实现,但我不确定为什么它不能正常工作。
这是我尝试过的以及我期望它做的事情。
IEnumerable<Account> sortedAccounts = accounts
.OrderBy(acct => acct.PersonRoles
.Where(role => role.PersNbr == 0001)
.Select(x => x.RoleOrder)).ToList();
我希望它按PersonRoles[] 订购主要的accounts[],其中PersNbr 等于给定的PersNbr (0001),然后按RoleOrder 排序。
所以基本上我只想根据RoleOrder 对特定人的accounts[] 进行排序。
所以根据Virginia排序会得到Accounts[] accounts = [0000000001, 0000000003, 0000000002]
根据David排序会得到Accounts[] accounts = [0000000003, 0000000001, 0000000002]
我对 LINQ 所做的没有做任何事情(顺序保持不变),这让我认为我正在以正确的顺序进行查询。
如何编写 LINQ 查询来执行此操作,还是需要将其拆分为不同的查询?
【问题讨论】: