在c#中从字典中为集合赋值

时间:2014-05-26 10:44:10

标签: c# linq

您好我需要从字典中为集合分配值。我的示例代码在

下面
public student
{
    public string Name { get; set;}
    public int Age { get; set;}
    public string Address { get; set;}
}

我的词典集是

Dictionary<string, Int16> StudentList= new Dictionary<string, Int16>();

StudentList.Add("Mahesh Chand", 35);
StudentList.Add("Mike Gold", 25);
StudentList.Add("Praveen Kumar", 29);
StudentList.Add("Raj Beniwal", 21);
StudentList.Add("Dinesh Beniwal", 84);

现在我的学生集合将仅重视姓名列表现在我需要使用linq将年龄分配给基于集合的密钥名称而不用foreach,是否可以在c#中使用?

2 个答案:

答案 0 :(得分:4)

您可以选择所有KeyValuePair<string, int>,然后您可以初始化每个学生:

List<Student> students = AuthorList
    .Select(kv = > new Student{ Name  = kv.Key, Age = kv.Value })
    .ToList();

<强>更新

  

我想在学生收集中插入年龄取决于学生   名称,为此我使用Name - Age字典集合作为   查找,是否清楚?

然后你需要某种循环,请注意LINQ中的Q代表查询。它不是更新集合的正确工具。

但是,您可以使用Enumerable.Join高效地将两个集合与LINQ链接,以准备foreach

List<Student> allStudents = getYourStudents();
// link all known students in the name-age-dictionary with this collection:
var studentInfos = from s in allStudents
                   join sa in StudentList.Keys
                   on s.Name equals sa
                   select new { Student = s, Age = StudentList[sa] };
foreach (var s in studentInfos)
    s.Student.Age = s.Age;

答案 1 :(得分:1)

var collection = dictionary.SelectMany(v => v.Value);