Linq查询 - 字典中的集合

时间:2014-07-22 12:38:56

标签: c# asp.net wpf linq

我试图使用linq从字典中获取结果,但我不知道该怎么做。 我正在尝试编写一个linq查询来获取员工姓名,empId = 2的工资。请使用正确的linq查询来纠正我。

class Program
{
    static void Main(string[] args)
    {
        Dictionary<int, List<Employee>> empDic = new Dictionary<int, List<Employee>>();
        var emp = new List<Employee>();
        emp.Add(new Employee{EmpID = 1,Name="affsa",Salary=2000})  ;
        emp.Add(new Employee { EmpID = 2, Name = "axy",Salary=3000 });
        emp.Add(new Employee { EmpID = 3, Name = "xyz",Salary=4000 });
        empDic.Add(1,emp);

        var selectedEmpDetails = empDic.Values
                                       .Select(r => r.Where(f => f.EmpID ==2))
                                       .ToList();          
    }
}

public class Employee
{
    public string Name { get; set; }
    public int EmpID { get; set; }
    public int Salary { get; set; }
}

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

var selectedEmpDetails = empDic.SelectMany(x=>x.Value)
                               .Where(x=>x.EmpId==2)
                               .Select(x=> new { Name = x.Name, Salary = x.Salary });

最初,我们在Employee个对象列表中展平字典的值。

然后我们选择EmpId等于2的对象。

最后我们选择它的名称和工资属性。

答案 1 :(得分:2)

我会在你的情况下使用SelectMany()函数,以便得到一个扁平的Employee实例列表。然后尝试使用FirstOrDecault()函数获取与employee id(如果有)匹配的第一个Employee实例。

var selectedEmpDetails = empDic.Values.SelectMany(r => r.Where(f => f.EmpID == 2)).FirstOrDefault();
if(selectedEmpDetails != null)
{
    string employeeName = selectedEmpDetails.Name;
    int employeeSalary = selectedEmpDetails.Salary;
}