我试图使用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; }
}
答案 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;
}