1

我有一个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"); 

我现在的目标是获得一个包含我正在使用 的值Chemistry的列表Botany

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

在尝试枚举值时 - 我能够获得 - tag=Chemistry& tag=Botany...而我想要的只是Chemistryand Botany

什么是合适的铸件?有没有更好的方法来获得这些值?

4

3 回答 3

4

你只需要写:

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

这里,student是 a string,因为students是 a List<string>,所以你只需要应用Where()。结果将是一个IEnumerable<string>.

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

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

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

var filteredList = students.Where(student => classes.ContainsKey(student))
                           .Select(student => classes[student]);
于 2012-08-27T17:06:50.723 回答
0

尝试:

var filteredList = students.Where(k => classes.ContainsKey(k))
                                     .Select(k => students[k]);
于 2012-08-27T17:07:08.223 回答
0
var filteredList = students.Where(k => classes.ContainsKey(k))
                                         .Select(k => students[k]);
于 2012-08-27T17:07:45.667 回答