我有一個位于此類集合中的資料集:
public class AOClientData
{
public int boclient_id { get; set; }
public string beneficialownertype_name { get; set; }
public int account_id { get; set; }
public string fi_name { get; set; }
public string acct_number { get; set; }
}
看起來像這樣:
boclient_id beneficialownertype_name account_id fi_name acct_number
1001 Joe 501 ABC 12345
1001 Joe 502 BCA 54321
1002 Fred 990 DDd 22334
目標是將其放入此類的集合中:
public class ClientInfo
{
public int boclient_id { get; set; }
public string beneficialownertype_name { get; set; }
public List<AccountInfo> Accounts { get; set; }
}
與這個類是一對多的關系:
public class AccountInfo
{
public int account_id { get; set; }
public string fi_name { get; set; }
public string acct_number { get; set; }
}
結果應該是 ClientInfo 物件的集合,如下所示:
1001 Joe {501, ABC, 12345 },
{502, BCA, 54321 }
1002 Fred {990, DDd, 22334 }
這是我的嘗試,它確實加載了所有客戶端資料,但 ClientInfo.Accounts 屬性中的 AccountInfo 物件的屬性都是空的:
List<ClientInfo> clientInfo = aoClientData
.GroupBy(c => new { c.boclient_id, c.beneficialownertype_name })
.Select(xGrp => new ClientInfo
{
boclient_id = xGrp.Key.boclient_id,
beneficialownertype_name = xGrp.Key.beneficialownertype_name,
Accounts = xGrp
.Select(c => new AccountInfo
{
account_id = c.account_id,
fi_name = c.fi_name,
acct_number = c.acct_number
})
.ToList()
})
.ToList();
LINQ 有什么問題?
uj5u.com熱心網友回復:
您已將c變數重新aoCLientData用作您的專案和分組專案。在您的內部選擇中使用.Select(a => new AccountInfo...然后使用a代替c來選擇a.account_id,a.fi_name和a.acct_number。
var result = data
.GroupBy(x => new { x.boclient_id, x.beneficialownertype_name })
.Select(x =>
new ClientInfo
{
boclient_id = x.Key.boclient_id,
beneficialownertype_name = x.Key.beneficialownertype_name,
Accounts = x.Select(a =>
new AccountInfo
{
account_id = a.account_id,
fi_name = a.fi_name,
acct_number = a.acct_number
}).ToList()
});
uj5u.com熱心網友回復:
如果我查看您的代碼,我不明白為什么您會得到多個ClientInfos,每個都有一個nullproperty 值Accounts。我什至不希望有一個空的帳戶串列。
您是否嘗試過使用具有引數 resultSelector的 GroupBy的多載?
List<ClientInfo> clientInfo = aoClientData
.GroupBy(
// parameter keySelector:
clientInfo => new
{
BoClientId = clientInfo.boclient_id,
BeneficialOwnerTypeName = clientInfo.beneficialownertype_name,
})
// parameter resultSelector: for every key item with all its zero or more AOClientData
// make one new ClientInfo
(key, aoClientsWithThisKey) => new ClientInfo
{
boclient_id = key.BoClientId,
beneficialownertype_name = key.BeneficialOwnerTypeName,
Accounts = aoClientsWithThisKey.Select(aoClient => new AccountInfo
{
account_id = aoClient.account_id,
fi_name = aoClient.fi_name,
acct_number = aoClient.acct_number
})
.ToList(),
})
.ToList();
uj5u.com熱心網友回復:
這是解決方案:
var items = aoClientData.GroupBy(c => new { c.boclient_id, c.beneficialownertype_name })
.Select(grp => new ClientInfo()
{
boclient_id = grp.Key.boclient_id,
beneficialownertype_name = grp.Key.beneficialownertype_name,
Accounts = grp.Select(r => new AccountInfo()
{
account_id = r.account_id,
acct_number = r.acct_number
}).ToList()
}).ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/376711.html
