我的MVC4应用程序中有一个非常简单的EF(CodeFirst)结构。
在我的控制器中,我有这个简单的查询:
var activity = db.Activities.Where(a => a.Engagement.Id == Id);
我的视图可以毫无问题地处理此查询的结果。
但是,在进行查询时,我需要将表连接到我的活动表。此查询适用于我:
var activity = from a in db.Activities
join m in db.Members on a.MemberID equals m.Id
where a.Engagement.Id == Id
select new
{
a.Description,
a.ActivityDate,
a.EngagementStageValue,
a.Hours,
m.Email,
};
问题是视图无法解释查询的结果。我收到这个错误:
“传入字典的模型项类型为'System.Data.Entity.Infrastructure.DbQuery 1[<>f__AnonymousType1
5 [System.String,System.DateTime,System.Int32,System.Int32, System.String]]',但是这个字典需要一个类型为'System.Collections.Generic.IEnumerable`1 [DomainClasses.Activity]'的模型项。“
我对MVC和EF(讨厌的学习曲线)相对较新,任何帮助都会很棒 谢谢!
答案 0 :(得分:2)
定义一个ActivityModel类,它将具有您需要的属性:
public class ActivityModel
{
public string Description {get; set;}
public DateTime ActivityDate {get; set;}
public yourtype EngagementStageValue {get; set;}
public DateTime Hours {get; set;}
public string Email {get; set;}
//you can also add new properties to get a cleaner view for an example
public string ActivityDateShort{
get{
return ActivityDate.ToShortDateString();
}
}
var activity = (from a in db.Activities
join m in db.Members on a.MemberID equals m.Id
where a.Engagement.Id == Id
select new ActivityModel
{
Description = a.Description,
ActivityDate = a.ActivityDate,
EngagementStageValue = a.EngagementStageValue,
Hours = a.Hours,
Email = m.Email,
}).ToList();
因此您将获得一个List并将其作为模型传递给您的视图并使用它执行您喜欢的操作。此致
答案 1 :(得分:0)
这是因为您正在生成匿名类型,并且该视图是强类型的。基本上,当您添加“电子邮件”字段并且视图不知道如何处理它时,您已创建了一个新类型。