我有2類用戶(count-10k),地址(count-1million)。這些就像一對多。什麼是最快的方式來寫linq
我正在嘗試爲用戶映射地址。
使用列表(需要幾分鐘):
List<User> us = usrs.Select(u => new User { id = u.id ,email=u.email,name=u.name,addresses=adrs.Where(a=>a.userid==u.id).ToList()}).ToList();
上述作品,但它的速度很慢
我改變它使用字典和快速。
使用詞典(需要幾秒鐘):
var dusrs = usrs.ToDictionary(usr => usr.id);
var daddrs = adrs.ToDictionary(adr => Tuple.Create(adr.id,adr.userid));
foreach (var addr in daddrs)
{
var usr = dusrs[addr.Value.userid];
if (usr.addresses == null)
{
usr.addresses = new List<Address>();
}
usr.addresses.Add(addr.Value);
}
有沒有什麼辦法,我可以用列表,而不是字典編寫更好的查詢?
我只是想看看我是否能使用列表
感謝寫出更好的LINQ ...
vamsee
我投票結束這個問題作爲題外話,因爲它是一個審查,因此應該去codereview.stackexchange.com – HimBromBeere
看看['GroupJoin'](https://msdn.microsoft.com /en-us/library/bb534297(v=vs.110).aspx)方法或[加入](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/join - 條款) –
您可以使用類似'adrs.ToLookUp(k => k.userid)'的查找方式',然後通過用戶標識從查找中提取地址列表。 – ViRuSTriNiTy