C# 使用Lambda查询复杂对象

C# 使用Lambda查询复杂对象,c#,linq,lambda,C#,Linq,Lambda,我正在查询一个复杂的c#对象,它描述了一个轮班花名册。此对象由web服务填充,是来自第三方软件供应商的对象 我的任务是从这个第三方产品的数据构建一个gridview。对象是一个包含嵌套在大多数对象中的其他对象的数组 我正在使用Lambda表达式沿对象向下导航,但我正在努力获取值,我还想知道我正在编写的表达式是否可以更好。下面是一个我试图说出员工姓名的示例: var employeeDetails = employeeRoster.PathsRosters.SelectMany(a => a

我正在查询一个复杂的c#对象,它描述了一个轮班花名册。此对象由web服务填充,是来自第三方软件供应商的对象

我的任务是从这个第三方产品的数据构建一个gridview。对象是一个包含嵌套在大多数对象中的其他对象的数组

我正在使用Lambda表达式沿对象向下导航,但我正在努力获取值,我还想知道我正在编写的表达式是否可以更好。下面是一个我试图说出员工姓名的示例:

var employeeDetails = employeeRoster.PathsRosters.SelectMany(a => a.EmployeesRosters);
                var empName = employeeDetails.Select(b => b.Resource.Name).ToList();
                foreach (string nam in empName)
                {
                    string var = nam;
                }
employeeRoster
是我从web服务返回的对象,
PathRosters
是一个数组。然后,我再次查询结果,并将其转换为一个列表,以获取员工姓名


有更好的方法吗?不幸的是,我无法序列化为XML,因为有人告诉我必须在对象的内存中进行序列化。

您可以对一个调用执行相同的操作,而不是进行两次调用:

var empNames = employeeRoster.PathsRosters.SelectMany(a => a.EmployeesRosters)
     .Select(b => b.Resource.Name).ToList();
var employeeNames = employeeRoster.PathsRosters.SelectMany(a => a.EmployeesRosters)
     .Select(b => b.Resource.Name).ToList();

此外,您的
foreach
循环没有任何作用。我不认为这样做有什么意义。

Hi-是的,我刚刚设法把它放在一行中,但要真正得到返回的值,需要foreach循环。或者有没有其他方法可以返回值?您想返回什么?列表还是字符串?如果是一个列表(即字符串对象的列表或集合),那么@gleng的答案将为您提供帮助。如果只是一个字符串,您可能希望将其包装在
string.Join(string.Empty,employeeNames)中
获取字符串。@在我的示例中,Andy5只是
返回employeeNames
。它将返回一个
列表