在EF

2014-02-10 25 views
1

選擇外鍵數據我有2種型號:帳戶和任務在EF

public class Account 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int Id { get; set; } 
    [Key] 
    public Guid UserId { get; set; } 
    public string UserType { get; set; } 
    public string Name { get; set; } 

} 

public class Task 
{ 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int id { get; set; } 
    [Key] 
    public Guid TaskId { get; set; } 
    [ForeignKey("TaskSubType")] 
    public Guid TaskSubTypeId { get; set; } 
    public virtual TaskSubType TaskSubType { get; set; } 
    [ForeignKey("Account")] 
    public Guid TaskCreator { get; set; }  
    public virtual Account Account { get; set; } 
} 

我打電話getTasks:

public List<TaskOverViewViewModel> GetTasks() 
{ 

    IEnumerable<Task> result = db.Tasks.AsEnumerable(); 

    List<TaskOverViewViewModel> list = ToViewModelMapper.toViewModel(result); 

    return list; 
} 

public class ToViewModelMapper 
    { 

     internal static List<TaskOverViewViewModel> toViewModel(IEnumerable<Task> entitys) 
     { 
      List<TaskOverViewViewModel> modelList = new List<TaskOverViewViewModel>(); 
      foreach (var entity in entitys) 
      { 
       TaskOverViewViewModel model = new TaskOverViewViewModel(); 

      model.SubTaskName = entity.TaskSubType.Name; 
      model.TaskCreator = entity.Account.LoginName; 
      model.ToolsAccesable = entity.ToolsAccesable; 
      modelList.Add(model); 

      } 


      return modelList; 
     } 
    } 

而是因爲我entity.TaskSubType失敗和entity.Account爲空。但是如果我在調用中返回IEnumerable<Task> result = db.Tasks.AsEnumerable();一切正常,我可以看到Json包含所有TaskSubtype和Account模型。

回答

1

從linq到實體,你可以直接投影到你的ViewModel類。

public List<TaskOverViewViewModel> GetTasks() 
{ 
    List<TaskOverViewViewModel> result = (from t in db.Tasks 
             select new TaskOverViewViewModel 
             { 
              SubTaskName = t.TaskSubType.Name; 
              TaskCreator = t.Account.LoginName; 
              ToolsAccesable = t.ToolsAccesable; 
             }).ToList(); 
    return result; 
} 

如果您願意方法的語法,您可以使用此:

List<TaskOverViewViewModel> result = db.Tasks.Select(t => new TaskOverViewViewModel 
             { 
             SubTaskName = t.TaskSubType.Name; 
             TaskCreator = t.Account.LoginName; 
             ToolsAccesable = t.ToolsAccesable; 
             }).ToList(); 
+0

Ifailed我需要ADDD .Tolist代替db.Tasks.AsEnumerable(),那是我的錯,但你使我解決方案 – Timsen