2011-12-12 68 views
2

作为一个新手,我试图使用MVC3,剃须刀,EF我有三个连接表,我想从中产生一个视图。在一个愚蠢的简单,以下是对表MVC3 linq加入

PJUsers - ID,memUID(这种独特的会籍编号),名字,姓氏

PJAwards - 用户提名其他用户的一个奖项,以awardtypesID外国此链接键(awardId,布尔:awardok)

PJAwartypes - (awardtypeID,awardName)

在控制器查询是这样

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 
}; 

某处我读,我要构建控制器

{ 
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; } 

} 
} 

请我学习的例子类似的查询模型类,以便能够帮助我以为我什么都不知道

+0

请勿使用连接。如果你的EF模型是好的你可以管理没有他们(c) – Shymep

回答

1

某处我读,我要构建类似于查询模型类控制器

尝试this

我猜你的EF-模型类似于 enter image description here

所以,你可以创建一个视图模型类

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(); 
    } 
} 

在结束你的控制器指数方法看起来像这样

public ActionResult Index() 
{ 
    var pjawards = PJAwardsViewModelHelper.PopulatePJAwardsViewModelList(PJAwardsService.GetAll().ToList()); 
    return View(pjawards); 
} 

你唯一应该做的就是添加一个视图(前建项目) 。选择PJAwardsViewModel作为Model classList作为scaffold template。 享受它。

+0

感谢你@Shymep非常详细,这是非常详细的 – Diin

+0

你是欢迎:) – Shymep