C# Значение ВНУТРЕННЕГО СОЕДИНЕНИЯ И ВОЗВРАТА Web API - PullRequest
1 голос
/ 26 февраля 2020

Ссылка на изображение модели EF enter image description here

Я планировал прочитать данные из базы данных, а затем использовать INNER JOIN in C# контроллер WebApi , как показано на рисунке ниже.

Ниже приведен запрос для Внутреннее объединение ссылки:

Select FirstName, LastName, Gender, Salary, E.Department_id, Department_Name 
from Employee E
INNER JOIN Department D on D.department_id = E.department_id

ОБНОВЛЕНИЕ

Ответ был подтвержден следующим кодом Решение для объединения данных с помощью Метод DTO

    public class JoinController: ApiController
    {
    DepartmentServicesEntities DSE = new DepartmentServicesEntities();
    [Route("Api")]

        [HttpGet]
        public object JoinStatement()
        {
            using (DSE)
            {
                var result = (from e in DSE.employee join d 
                in DSE.department on e.department_id equals d.department_id 
                select new {
                FirstName = e.FirstName, 
                LastName = e.LastName, 
                Gender = e.Gender, 
                Salary = Salary, 
                Department_id = e.department_id, 
                Department_Name = d.department_name
                }).ToList();
            // TODO utilize the above result
            return result;
            }
        }
    }
}

Что касается объединения несколько таблиц , решение было здесь:

namespace WebApiJoinData.Controllers
{
    [RoutePrefix("Api")]
    public class JoinController : ApiController
    {
        DepartmentServicesEntities DSE = new DepartmentServicesEntities();
        [Route("Api")]

        [HttpGet]
        public object JoinStatement()
        {
            using (DSE)
            {
                var result = (from e in DSE.employees
                              join d in DSE.departments on e.department_id equals d.department_id
                              join ws in DSE.workingshifts on e.shift_id equals ws.shift_id
                              select new
                              {
                                  FirstName = e.FirstName,
                                  LastName = e.LastName,
                                  Gender = e.Gender,
                                  Salary = e.Salary,
                                  Department_id = e.department_id,
                                  Department_Name = d.department_name,
                                  Shift_id = ws.shift_id,
                                  Duration = ws.duration,
                              }).ToList();
                // TODO utilize the above result

                string json = Newtonsoft.Json.JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
                return result;
            }
        }
    }
}

Вывод следующий результат был показан здесь :

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

Согласно приведенной выше модели, вы должны изменить свой запрос следующим образом:

public class JoinController: ApiController
{
DepartmentServicesEntities DSE = new DepartmentServicesEntities();
[Route("Api")]

    [HttpGet]
    public object JoinStatement()
    {
        using (DSE)
        {
            var result = (from e in DSE.employee join d 
            in DSE.department on e.department_id equals d.department_id 
            select new {
            FirstName = e.FirstName, 
            LastName = e.LastName, 
            Gender = e.Gender, 
            Salary = Salary, 
            Department_id = e.Department_id, 
            Department_Name = d.Department_Name
            }).ToList();
        // TODO utilize the above result
        }
    }
}

Существует только одна проблема с приведенным выше кодом, в результате всегда будет Анонимный тип объект. Таким образом, рекомендуется использовать Data Transfer Object ( DTO ) всякий раз, когда у вас есть случай объединения нескольких объектов для правильного отображения.

1 голос
/ 27 февраля 2020

Это законченный ответ, который я разобрал через концепцию DTO благодаря вкладу @vikscool

namespace WebApiJoinData.Controllers
{
    [RoutePrefix("Api")]
    public class JoinController : ApiController
    {
        DepartmentServicesEntities DSE = new DepartmentServicesEntities();
        [Route("Api")]

        [HttpGet]
        public object JoinStatement()
        {
            using (DSE)
            {
                var result = (from e in DSE.employees
                              join d in DSE.departments on e.department_id equals d.department_id
                              join ws in DSE.workingshifts on e.shift_id equals ws.shift_id
                              select new
                              {
                                  FirstName = e.FirstName,
                                  LastName = e.LastName,
                                  Gender = e.Gender,
                                  Salary = e.Salary,
                                  Department_id = e.department_id,
                                  Department_Name = d.department_name,
                                  Shift_id = ws.shift_id,
                                  Duration = ws.duration,
                              }).ToList();
                // TODO utilize the above result

                string json = Newtonsoft.Json.JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
                return result;
            }
        }
    }
}

Он показал следующий результат:

[{"FirstName ":" Питер», "LastName": "Джо", "Пол": "Мужской", "Зарплата": 1234, "department_id": 1, "Department_Name": "RND", "Shift_id": "А", "Продолжительность": "утро"}, { "FirstName": "Джон", "LastName": "Doe", "Пол": "Мужской", "Зарплата": 1234, "department_id": 2, "Department_Name": "Счет", "Shift_id": "B", "Продолжительность": "после обеда"}, { "FirstName": "Мария", "LastName": "Джонс", "Пол": "Женский", "Зарплата": 5566, "department_id": 3, "Department_Name": "HR", "Shift_id": "А", "Продолжительность": "утро"}, { "FirstName": "Элизабет", "LastName": "Тан", "Пол": "Женский", "Зарплата": 9999, "department_id": 1, "Department_Name": "RND", "Shift_id": "C", "Продолжительность": "ночь"}, { "FirstName ":" GG», "ЬазШате": "в.ч.", "Пол": "NoGender", "Зарплата": 8, "department_id": 1, "Department_Name": "RND", "Shift_id": "В", "Длительность": "день"}]

Спасибо всем, проблема была решена

1 голос
/ 26 февраля 2020

Надеюсь, ваше объединение работает?!

Если это так, вы можете выполнить запрос через EF и получить результаты, как показано ниже:

namespace WebApiJoinData.Controllers
{
[RoutePrefix("Api")]
public class JoinController : ApiController
{
    DepartmentServicesEntities DSE = new DepartmentServicesEntities();
    [Route("Api")]


        [HttpGet]
        public object JoinStatement()
        {
            string Msg = String.Empty;
            string sql = String.Format("Select FirstName, LastName, Gender, Salary, E.Department_id, Department_Name from Employee E INNER JOIN Department D on D.department_id = E.department_id");

            using (DSE)
            {
                //proceed the query and return Msg
                var results = DSE.Database.SqlQuery<object>(sql).ToList();                    
                Msg = Newtonsoft.Json.JsonConvert.SerializeObject(results);                    
                return results;
            }
        }
    }
}

Я бы предложил вы создаете класс DTO вместо использования объекта, поскольку это поможет, если у вас большие объемы данных.

Другим способом может быть возвращение данных в виде json string

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...