作为新手,我正在尝试 MVC3、razor、EF 我有三个连接的表,我想从中生成一个 View 。以下是关于表格的简单介绍
PJUsers - ID,memUID(来自成员(member)的唯一 ID),名字,姓氏
PJAwards - 用户提名另一个用户获得奖项,这与作为外键的 awardtypesID 链接(awardId,bool:awardok)
PJAwartypes - (awardtypeID, awardName)
Controller 中的查询是这样的
var lists =
from tl in db.PJawards
join u in db.PJUsers on tl.nomineeId equals u.ID into tl_u
join i in db.PJUsers on tl.nominatorId equals i.MemUID into tl_i
where tl.awardOk
orderby tl.awardDated ascending
from u in tl_u.DefaultIfEmpty()
from i in tl_i.DefaultIfEmpty()
select new
{
Status = tl.awardOk,
nomineeFname = u.FirstName,
nomineeLname = u.LastName,
award = tl.PJawards.awardName,
Dated = tl.awardDated,
nominatorFname = i.FirstName,
nominatorLname = i.LastName,
nomineeCountry = u.Citizen,
nomineeResidence = u.Residence,
awardtypeId = tl.ID
};
我在某处读到我必须构造一个类似于 Controller 中查询的模型类
{
public class AwardUserInfo
{
public AwardUserInfo() { }
public bool Status { get; set; }
public string nomineeFname { get; set; }
public string nomineeLname { get; set; }
public string award { get; set; }
public string Dated { get; set; }
public string nominatorFname { get; set; }
public string nominatorLname { get; set; }
public string nomineeCountry { get; set; }
public string nomineeResidence { get; set; }
public int awardtypeId { get; set; }
}
}
请我通过示例学习,以便能够帮助我假设我什么都不知道
最佳答案
somewhere i read that i have to construct a model class similar to the query in the controller
尝试 this .
我猜你的 ef-model 类似于
所以你可以创建一个 ViewModel 类
public class PJAwardsViewModel
{
public int Id { get; set; }
public string NominatorFName { get; set; }
public string NomineeFname { get; set; }
public string AwardName { get; set; }
public bool IsAwarded { get; set; }
}
如果加点服务类也不错
public class PJAwardsService
{
public static List<PJAwards> GetAll()
{
using (var context = new YourDBEntities())
{
return context.PJAwards
.Include(x => x.PJUsers)
.Include(x => x.PJUsers1)
.Include(x => x.PJAwartypes).ToList();
}
}
}
(不要忘记编写 using System.Data.Entity;
)
然后你可以添加一个 ViewModelHelper 类
public class PJAwardsViewModelHelper
{
public static PJAwardsViewModel PopulatePJAwardsViewModel(PJAwards pjaward)
{
return new PJAwardsViewModel
{
Id = pjaward.Id,
NominatorFName = pjaward.PJUsers.FirstName,
NomineeFname = pjaward.PJUsers1.FirstName,
AwardName = pjaward.PJAwartypes.AwardName,
IsAwarded = pjaward.IsAwarded
};
}
public static List<PJAwardsViewModel> PopulatePJAwardsViewModelList(List<PJAwards> pjawardsList)
{
return pjawardsList.Select(x => PopulatePJAwardsViewModel(x)).ToList();
}
}
最后,您的 Controller 索引方法将如下所示
public ActionResult Index()
{
var pjawards = PJAwardsViewModelHelper.PopulatePJAwardsViewModelList(PJAwardsService.GetAll().ToList());
return View(pjawards);
}
您唯一应该做的就是添加一个 View (之前构建项目)。选择 PJAwardsViewModel
作为 Model class
和 List
作为 scaffold template
。
尽情享受吧。
关于c# - MVC3 linq 加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8472564/