假设我有一个Employee实体,每个Employee都有许多EmployeeChange实体。
Employee和EmployeeChange看起来像:
class Employee
{
[Key]
public int EmployeeKey {get;set;}
public string EmployeeName { get; set; }
public int CurrentEmployeeChangeKey { get; set; }
[ForeignKey("CurrentEmployeeChangeKey")]
public virtual EmployeeChange CurrentEmployeeChange {
get { return EmployeeChanges.FirstOrDefault() ; } /*set;*/ }
public virtual ICollection<EmployeeChange> EmployeeChanges { get; set; }
}
class EmployeeChange
{
[Key]
public int EmployeeChangeKey { get; set; }
public int EmployeeKey { get; set; }
[ForeignKey("EmployeeKey")]
public virtual Employee Employee { get; set; }
public string EmployeeStreet { get; set; }
public string EmployeeCity { get; set; }
public string Etc { get; set; }
public DateTime ChangeEffective { get; set; }
}
是否有一个LINQ查询可以在MVC ViewModel中为我们制作类似下面的内容,而不会列出每个属性? I.e。如果我在我的Entity或Entity类中添加/删除属性,我希望LINQ查询不必更改。下面当然是从LINQ查询中的投影动态生成的,而不是实际声明的类。一个重要的事情是需要保留任何DataAnnotations,以便视图可以访问它们:
class EmployeeCurrentChange
{
public string EmployeeName { get; set; }
public string EmployeeStreet { get; set; }
public string EmployeeCity { get; set; }
public string Etc { get; set; }
public DateTime ChangeEffective { get; set; }
//I don't need the below properties in the result, but if they
//happen to be there I don't mind.
public int EmployeeKey { get; set; }
[ForeignKey("EmployeeKey")]
public virtual Employee Employee { get; set; }
[Key]
public int EmployeeKey {get;set;}
public int CurrentEmployeeChangeKey { get; set; }
[ForeignKey("CurrentEmployeeChangeKey")]
public virtual EmployeeChange CurrentEmployeeChange {
get { return EmployeeChanges.FirstOrDefault() ; } /*set;*/ }
public virtual ICollection<EmployeeChange> EmployeeChanges { get; set; }
[Key]
public int EmployeeChangeKey { get; set; }
}
我用反射标记了这一点,因为我知道如果不使用反射就不可能。
答案 0 :(得分:0)
看看这个问题:How to create LINQ Expression Tree to select an anonymous type
基本上他创建了一个可以在运行时投影匿名类型的类,您可以根据自己的需要调整它。但由于它是一个匿名类型,并且它在运行时生成,因此您无法获得任何设计时支持。由于类型是在运行时生成的,但您可以将属性附加到投影以复制当前类中存在的内容。
老实说,不确定为什么你会想要这样做,因为它有相当多的工作,但我认为我会传递我对这个主题的了解。