如何使用asp.net mvc4加入2表

时间:2013-06-07 09:28:47

标签: database asp.net-mvc-4

如何在1个视图中合并2个表 这是我的模特。

namespace ProfileApplication.Models
{
    using System;
    using System.Collections.Generic;

    public partial class EMP
    {
        public string EMP_ID { get; set; }
        public string EMP_NAME { get; set; }
        public string EMP_LNAME { get; set; }
     } 

    public partial class X_EMP_MAIL
    {
        public string EMP_ID { get; set; }
        public string EMAIL { get; set; }
    }
这是我的Controtller。

public class profileController : Controller
    {
        //
        // GET: /profile/
        ProfileEntities db = new ProfileEntities();

        public ActionResult Index()
        {
            return View(db.EMP.ToList());
        }

        public ActionResult detail(string id = null) 
        {

            var query = from EMP in db.EMP

                        join X_EMP_MAIL in db.X_EMP_MAIL on EMP.EMP_ID
                             equals X_EMP_MAIL.EMP_ID

                        where   X_EMP_MAIL.EMP_ID == EMP.EMP_ID
                        select new joinproflie
                        {
                            EMP_ID    = EMP.EMP_ID,
                            EMP_NAME  = EMP.EMP_NAME,
                            EMP_LNAME = EMP.EMP_LNAME,
                            EMAIL     = X_EMP_MAIL.EMAIL
                        };

            if (query == null)
            {
                return HttpNotFound();
            }
            return View(query);
        }

这是我的观点

@model IEnumerable<ProfileApplication.Models.EMP>
 @foreach (var item in Model)
    {
        <tr>
            <td>@item.EMP_ID    </td>
            <td>@item.EMP_NAME  </td>
            <td>@item.EMP_LNAME </td>
            <td>@item.EMAIL </td>
         <!--   -->
        </tr>
        <br/>
    }

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您可以再创建一个viewmodel类来组合两个视图模型:

public partial class EMP_Details
{
    public string EMP_ID { get; set; }
    public string EMP_NAME { get; set; }
    public string EMP_LNAME { get; set; }
    public string EMAIL { get; set; }
 }

在控制器上将其更改为返回EMP_Details viewmodel。如

public ActionResult detail(string id = null) 
    {

        var query = from EMP in db.EMP

                    join X_EMP_MAIL in db.X_EMP_MAIL on EMP.EMP_ID
                         equals X_EMP_MAIL.EMP_ID

                    where   X_EMP_MAIL.EMP_ID == EMP.EMP_ID
                    select new EMP_Details
                    {
                        EMP_ID    = EMP.EMP_ID,
                        EMP_NAME  = EMP.EMP_NAME,
                        EMP_LNAME = EMP.EMP_LNAME,
                        EMAIL     = X_EMP_MAIL.EMAIL
                    };

        if (query == null)
        {
            return HttpNotFound();
        }
        return View(query);
    }

在视图上将ViewModel Name更改为:

@model IEnumerable<ProfileApplication.Models.EMP_Details>

你完成了!

答案 1 :(得分:0)

您可以创建包含EMP_ID,EMP_NAME,EMP_LNAME和EMAIL属性的模型类,也可以使用dynamic作为模型。