枚举期间的LINQ转换

时间:2012-08-27 17:04:51

标签: c# linq list dictionary casting

我有List<string>

List<string> students;
students.Add("Rob");
students.Add("Schulz");

Dictionary<string,string>

Dictionary<string, string> classes= new Dictionary<string, string>();
classes.Add("Rob", "Chemistry");  
classes.Add("Bob", "Math"); 
classes.Add("Holly", "Physics"); 
classes.Add("Schulz", "Botany"); 

我的目标是获取一个包含值的列表 - ChemistryBotany - 我正在使用此

var filteredList = students.Where(k => classes.ContainsKey(k))
                                         .Select(k => new { tag = students[k] });

在尝试枚举值时 - 我能够获得 - tag=Chemistry&amp; tag=Botany ...虽然我只想ChemistryBotany

适用什么样的铸件?有没有更好的方法来达到这些价值?

3 个答案:

答案 0 :(得分:4)

你只需写:

var filteredList = students.Where(student => classes.ContainsKey(student));

此处studentstring,因为studentsList<string>,因此您只需申请Where()。结果将是IEnumerable<string>

如果您想将可枚举内容耗尽到另一个List<string>,则可以应用ToList()

var filteredList = students.Where(student => classes.ContainsKey(student)).ToList();

如果你想要一个类列表(问题中的代码不清楚),那么你必须将Select()应用于学生的项目类:

var filteredList = students.Where(student => classes.ContainsKey(student))
                           .Select(student => classes[student]);

答案 1 :(得分:0)

尝试:

var filteredList = students.Where(k => classes.ContainsKey(k))
                                     .Select(k => students[k]);

答案 2 :(得分:0)

var filteredList = students.Where(k => classes.ContainsKey(k))
                                         .Select(k => students[k]);