【发布时间】:2017-08-04 15:55:01
【问题描述】:
我有 2 个类用户(count-10k),address(count-100 万)。这些就像一对多。
我正在尝试为用户映射地址。
使用列表(需要几分钟):
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
-
您可以使用
adrs.ToLookUp(k => k.userid)之类的查找,然后按用户ID 从查找中提取地址列表。 -
类不包含计数 - 你有
Lists 的user和address或其他一些集合类型吗? -
我们能否假设
user集合在某些条件下比原来的集合减少了,这就是为什么每个用户有 100 个地址?
标签: c# performance list linq dictionary