列表对象ToDictionary <object,list <object =“”>&gt; </object,>

时间:2014-04-28 09:40:26

标签: c# linq todictionary

public class User
{
   public string name { get; set; }
   public string login { get; set; }     
   public string company { get; set; }
}

如何将List<User>转换为ToDictionary<string, List<string>> 其中key:company value:names。

我尝试这样做

List<User> users = context.getallUsers();
var usersByCompany = users .ToDictionary<string, List<string>>(u => u.company, users.Where(d=>d.company==u.company).Select(c=>c.name).ToList()); 

2 个答案:

答案 0 :(得分:3)

首先按公司分组用户,然后将组转换为字典:

users.GroupBy(u => u.company)
     .ToDictionary(g => g.Key,
                   g => g.Select(u => u.name).ToList());

注意:字典的类型将从使用中推断出来。

您也可以考虑使用ILookup<string, string>代替Dictionary<string, List<string>>

users.ToLookup(u => u.company, u => u.name)

答案 1 :(得分:1)

您可能希望使用ToLookup方法:

ILookup<string, User> usersLookup = users.ToLookup(u => u.company);

usersLookup可由company

编制索引
foreach (User u in userLookup["IBM"]) {...} //IBM users

如果您仍需要公司名称对,请尝试以下操作:

ILookup<string, string> usersLookup = users.ToLookup(u => u.company, u => u.name);