如何使用属性名列表创建匿名类型列表



我试图创建一个csv导出器,从我们的数据库导出模型到csv文件。作为一项要求,对于每次导出,用户都能够选择需要导出模型的哪些属性。

是否可能返回一个只包含所选属性的匿名类型,其中属性是由用户选择的,因此不知道

示例数据类:

public class Location
{
public Location() { }
public int Id { get; set; }
public string Name { get; set; }
public string City { get; set; }
public string State { get; set; }
}

手动的例子:

public IActionResult GetSelectProperties()
{    
var locations = new List<Location>(); // Assume a filled list
return new JsonResult(locations.Select(x => new {x.Name, x.City}));
}

理想(不完全)溶液

public IActionResult GetSelectProperties2()
{
var locations = new List<Location>();
var properties = new List<string>() { "Name", "City" };
return new JsonResult(locations.Select(x => { < where x in properties ?> }));
}

我已经尝试使用反射

var property = typeof(Location).GetProperty("Name");

但是不知道如何在LINQ查询中组合PropertyInfo

您不能为此使用匿名类型,因为它们的属性必须在编译时声明,但是您可以使用字典:

return new JsonResult(
locations.Select(location => properties.ToDictionary(
property => property,
property => typeof(Location).GetProperty(property).GetValue(location))));

如果您事先知道模型,那么使用反射将很容易。在您的案例中,您正在按需生成模型。您是否使用ADO.net或任何特定的SDK?如果你可以迭代数据库模式,那么这将是最好的方法。

相关内容

  • 没有找到相关文章

最新更新