[c#]它是可能要写这篇文章作为一个 linq 查询吗?

发布时间: 2017/2/28 21:26:02
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

按标题是代码的可以编写下面段为 linq 查询。 在它发现了它的当前状态不是很好的性能以大约 1 到 2 秒钟的时间完成了几千行。

var user = this.userService.Find<ApplicationUser>(userid);
var dict = new Dictionary<string, List<int>>();
List<ApplicationUser> allUsers = new List<ApplicationUser>();
foreach (var partner in user.Partners)
{
    foreach (var programme in partner.Programmes)
    {
        foreach (var tm in programme.TeamMembers)
        {
            if (!dict.ContainsKey(tm.ApplicationUserId))
            {
                dict.Add(tm.ApplicationUserId, new List<int> {partner.Id});
                allUsers.Add(tm.ApplicationUser);
            }
            else
            {
                dict[tm.ApplicationUserId].Add(partner.Id);
            }
        }
    }
}
var usersviewmodel = Mapper.Map<List<UserListViewModel>>(allUsers);
usersviewmodel.ForEach(x=> x.PartnerIds = dict[x.Id]);

我不介意到自动绘制和稍后添加 id,但如果这也可以在 linq 查询中,它就好。

解决方法 1:

试试这个︰

var dict = new Dictionary<string, List<int>>();
List<ApplicationUser> allUsers = new List<ApplicationUser>();
var groupedByApplicationUserId = from partner in user.Partners
                                 from programme in partner.Programs
                                 from tm in programme.TeamMembers
                                 select new { ApplicationUserId = tm.ApplicationUserId,
                                              PartnerId = partner.Id,
                                              ApplicationUser = tm.ApplicationUser,
                                             };
groupedByApplicationUserId.GroupBy(item => item.ApplicationUserId).ToList().ForEach(group =>
{
    dict.Add(group.Key, group.Select(item => item.PartnerId).ToList());
    allUsers.AddRange(group.Select(item => item.ApplicationUser));
});
官方微信
官方QQ群
31647020