【发布时间】:2015-04-09 09:45:09
【问题描述】:
我想返回一个对象 (ExpandoObject),其中仅包含该方法接收的字段和嵌套字段。
var fieldsToGet = new List<string> { "FirstName", "Id"};
当我这样做时:
.Select(x => Helpers.FilteringProperties(x, fieldsToGet))
我收到一个具有这两个值的对象,这很有效。
我收到一个带有FirstName 和Id 的对象
现在我想返回嵌套对象的一些属性:
var fieldsToGet = new List<string> { "FirstName", "Id", "Language.Name"};
我想收到这些属性:
FirstName、Id 和 Language.Name
下面的代码有效,但我希望保持足够通用并能够管理嵌套。
我怎样才能做到这个通用的、托管的嵌套对象?
谢谢,
当前代码:
public static object FilteringProperties(object employee, List<string> fields)
{
if (!fields.Any())
return employee;
else
{
ExpandoObject result = new ExpandoObject();
foreach (var field in fields)
{
var fieldValue = employee.GetType()
.GetProperty(field, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
.GetValue(employee, null);
((IDictionary<String, Object>)result).Add(field, fieldValue);
}
return result;
}
}
示例类:
public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Language Language { get; set; }
public int LanguageId { get; set; }
}
public class Language
{
public int Id { get; set; }
public string Code { get; set; }
public string Name { get; set; }
}
【问题讨论】:
标签: c# .net linq reflection lambda