c# - MVC3 linq 加入

标签 c# asp.net-mvc-3 join

作为新手,我正在尝试 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 类似于 enter image description here

所以你可以创建一个 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 classList 作为 scaffold template。 尽情享受吧。

关于c# - MVC3 linq 加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8472564/

相关文章:

c# - 从 C# 中的 pod 访问 Kubernetes API

c# - 如何在 SharpDevelop 4.2 中启动一个国际化的 WPF 项目?

c# - 如何强制浏览器下载 xml 文件?

asp.net-mvc - 如果我使用ASP .NET MVC 3,可以安全地从Visual Studio中删除ASP .NET MVC 2吗?

asp.net-mvc-3 - 有没有办法减少 TinyMCE 文件和文件夹的数量?

mysql - 如何获取mysql中另一列中所有记录的总和

r - 根据间隔范围内的公共(public) ID 和日期合并两个数据集

mysql - 如何在连接中转换这个子查询?

javascript - Angular js应用程序函数无法计算总数

c# - 无法加载角色提供者的类型