Return class as JSON 使用 Entity Framework 在 API 中增加一个字段
Return class as JSON with one extra field in API using Entity Framework
我有一个 class Employee
里面有很多属性,当我想从数据库中读取它时 return 它的列表。我想给它添加一个额外的字段。
目前是这样的:
return await _context.Employees.ToListAsync();
我不想在 Employee
之后使用 Select
命令,因为据我所知,我必须在 Employee
class 中列出我的所有属性以可以像下面这样添加一个额外的:
return await _context.Employees.Select(em => new
{
em.Firstname, // In employee class
em.Lastname, // In employee class
... // Other properties in employee class
EXTRAFIELD = "Data" // Extra field with any data I want to add to employee
}).ToListAsync();
但在上面的解决方案中,我必须列出员工 class 中的所有字段。
我不想像下面那样做,因为它会将员工放入新对象名称 em:
return await _context.Employees.Select(em => new
{
em,
EXTRAFIELD = "Data" // Extra field with any data I want to add to employee
}).ToListAsync();
有没有办法告诉 DbContext
(_context
) 到 return Employee
字段并在其中添加 "this new field" (创建具有的新对象与 Employee
相同的属性,但多了一个)?
如何创建和return 一个将继承 Employee 属性的自定义对象?您可以添加额外的通用字段,例如:
public class CustomEmployee<T> : Employee
{
public T Data { get; set; }
}
我知道您不想使用 Select 将值从一个对象复制到另一个对象,但我们可以创建这样的东西:
public class CustomEmployee<T> : Employee
{
public CustomEmployee() { } //for cases if you don't want to copy values while creating an instance
public CustomEmployee(Employee employee)
{
foreach (PropertyInfo prop in employee.GetType().GetProperties())
{
PropertyInfo prop2 = employee.GetType().GetProperty(prop.Name);
prop2.SetValue(this, prop.GetValue(employee, null), null);
}
}
public T Data { get; set; }
}
在构造函数中,您必须传递一个继承的实例 Employee,上面的代码会将值从 Employee 复制到 CustomEmployee。
并像这样使用:
return await _context.Employees.Select(em => new CustomEmployee(em)<string>
{
Data = "Extra data"
}).ToListAsync();
我有一个 class Employee
里面有很多属性,当我想从数据库中读取它时 return 它的列表。我想给它添加一个额外的字段。
目前是这样的:
return await _context.Employees.ToListAsync();
我不想在 Employee
之后使用 Select
命令,因为据我所知,我必须在 Employee
class 中列出我的所有属性以可以像下面这样添加一个额外的:
return await _context.Employees.Select(em => new
{
em.Firstname, // In employee class
em.Lastname, // In employee class
... // Other properties in employee class
EXTRAFIELD = "Data" // Extra field with any data I want to add to employee
}).ToListAsync();
但在上面的解决方案中,我必须列出员工 class 中的所有字段。
我不想像下面那样做,因为它会将员工放入新对象名称 em:
return await _context.Employees.Select(em => new
{
em,
EXTRAFIELD = "Data" // Extra field with any data I want to add to employee
}).ToListAsync();
有没有办法告诉 DbContext
(_context
) 到 return Employee
字段并在其中添加 "this new field" (创建具有的新对象与 Employee
相同的属性,但多了一个)?
如何创建和return 一个将继承 Employee 属性的自定义对象?您可以添加额外的通用字段,例如:
public class CustomEmployee<T> : Employee
{
public T Data { get; set; }
}
我知道您不想使用 Select 将值从一个对象复制到另一个对象,但我们可以创建这样的东西:
public class CustomEmployee<T> : Employee
{
public CustomEmployee() { } //for cases if you don't want to copy values while creating an instance
public CustomEmployee(Employee employee)
{
foreach (PropertyInfo prop in employee.GetType().GetProperties())
{
PropertyInfo prop2 = employee.GetType().GetProperty(prop.Name);
prop2.SetValue(this, prop.GetValue(employee, null), null);
}
}
public T Data { get; set; }
}
在构造函数中,您必须传递一个继承的实例 Employee,上面的代码会将值从 Employee 复制到 CustomEmployee。
并像这样使用:
return await _context.Employees.Select(em => new CustomEmployee(em)<string>
{
Data = "Extra data"
}).ToListAsync();