Как объединить две таблицы с помощью Entity Framework

#asp.net-mvc #entity-framework-6

#asp.net-mvc #entity-framework-6

Вопрос:

Контроллер:

 public ActionResult Index()
{
        var Cs = new List<Customer>();

        using (JoinEntities db = new JoinEntities())
        {
            Cs = (from p in db.Customers
                  join e in db.Orders on p.ID equals e.Customer_id
                  where p.Name == "Rama"
                  select p).ToList();
        }

        return View(Cs);
}
  

Вид:

 @model IEnumerable<JOIN.Models.Customer>
@{
    ViewBag.Title = "Home Page";
}
<table class="table table-condensed table-hover">
   <thead>
     <tr>
        <td>First Name</td>
        <td>salary</td>
        <td>age</td>
        <td>amount</td>
    </tr>
   </thead>
   <tbody>
   @foreach (var per in Model)
   {
     <tr>
        <td>@per.ID</td>
        <td>@per.Name</td>
        <td>@per.Age</td>
        <td>@per.Amount</td>
     </tr>
    }
</tbody>
</table>
  

В приведенном выше представлении кода требуется только один столбец таблицы, как я могу получить другие столбцы таблицы в таблице customer идентификатор является первичным ключом, а таблица заказов customer_id — внешним ключом

  • customer таблица: столбцы id, имя, возраст, зарплата
  • order таблица: столбцы oid, date, customer_id, amount

Комментарии:

1. Вы можете создать класс viewmodel со свойством таблицы customer и order и можете использовать эту модель представления в предложении select

Ответ №1:

Создайте другую модель представления, как показано ниже

 public class CustomerOrderViewModel
    {
        public int CustomerId { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public double  Salary { get; set; }

        public int OrderId { get; set; }
        public DateTime Date { get; set; }
        public double  Amount { get; set; }
    }  

И обновите свой метод индексации, как показано ниже

 public ActionResult Index()
    {
        using (JoinEntities db = new JoinEntities())
        {
            var customerOrderList = (from p in db.Customers
                  join e in db.Orders on p.ID equals e.Customer_id
                  where p.Name == "Rama"
                  select new CustomerOrderViewModel {
                      CustomerId = p.Id,
                      Name = p.Name,
                      Age= p.Age,
                      Salary = p.Salary,
                      OrderId= e.Id,
                      Date= e.Date,
                      Amount = e.Amount
                  }).ToList();
            return View(customerOrderList);
        }        
    }  

И измените модель представления вашего представления на

@model IEnumerable<JOIN.Models.CustomerOrderViewModel>

Комментарии:

1. большое вам спасибо, братан, теперь в вашем коде все работает нормально, используя инструкцию u, r не добавляя список

Ответ №2:

Вам нужно создать другую модель, например

 class MyModel{
     public string Name{get;set;}
     public DateTime Date {get;set;}
}
  

И изменение в запросе выбора:

 var Cs = new List<MyModel>();

using (JoinEntities db = new JoinEntities())
        {
            Cs = (from p in db.Customers
                  join e in db.Orders on p.ID equals e.Customer_id
                  where p.Name == "Rama"
                  select new MyModel {
                     Name = p.Name,
                     Date = e.date
                  }).ToList();
        }