Объединение двух таблиц в asp.net webapi 2 - PullRequest
0 голосов
/ 01 ноября 2019

Нужна помощь в соединении двух таблиц в asp.net webapi 2

У меня есть следующий код для объединения двух таблиц

  public IQueryable<Employee> GetEmployees()
    {


        var q = (from n in db.Employees
                 join c in db.tblCities on n.ProjectID equals c.CityID

                 select new
                 {
                     n.Name,
                     n.Email,
                     c.CityName,

                 }).ToList();
        return q;

    }

, но я получаю эту ошибку

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0266 Невозможно неявно преобразовать тип 'System.Collections.Generic.List <>' в 'System.Linq.IQueryable'. Существует явное преобразование (вам не хватает приведения?) WebApplication15 C: \ Users \ admin \ source \ repos \ WebApplication15 \ WebApplication15 \ Controllers \ EmployeesController.cs 35 Активный

модель сотрудника

namespace WebApplication15
{
    using System;
    using System.Collections.Generic;

    public partial class DtscEmployee
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public string Country { get; set; }
        public Nullable<int> ProjectID { get; set; }
        public string ManagerName { get; set; }
        public string ProfileImage { get; set; }

    }
}

модель города

namespace WebApplication15
{
    using System;
    using System.Collections.Generic;

    public partial class tblCity
    {
        public int CityID { get; set; }
        public string CityName { get; set; }
    }
}

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

давайте сделаем этот шаг за шагом, начиная с вашего исходного кода.

IQueryable - это выражение, которое вы создаете, запрос, если хотите. Это важное различие, это не фактические данные. Вы можете связать несколько условий в нем, поэтому возвращение IQueryable иногда полезно, поскольку это позволяет этому связыванию произойти.

Когда вы готовы выполнить выражение и получить фактические данные, это когда вы перечисляете, так что ваш ToList () в конце пойдет и выполнит запрос, вернет данные в том формате, который вы ожидаете, List, а не IQueryable

Конечно, на этом этапе ясно, что ваша конечная точка APIникогда не должен возвращать IQueryable, поскольку это еще не данные.

Итак, ваш код станет примерно таким:

public IHttpActionResult GetEmployees()
    {
        var query = (from n in db.Employees
                 join c in db.tblCities on n.ProjectID equals c.CityID

                 select new
                 {
                     n.Name,
                     n.Email,
                     c.CityName
                 });

       var employees = query.ToList();

       //some other things, maybe you want to return BadRequest if there are none or NotFound or whatever you deem appropriate
       return Ok(employees);           
    }

хорошее прочтение по этому вопросу здесь: https://docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with-aspnet-web-api/action-results

на вашем месте я бы начал с простого, включил демонстрационный контроллер, убедился, что вы можете выполнить действия по умолчанию, затем измените его на свои, позаботьтесь о маршрутах, убедитесь, что они работают правильно.

0 голосов
/ 01 ноября 2019

Судя по всему, вам нужно создать класс Employee, который будет содержать необходимые данные, которые вам нужны.

Класс сотрудника:

public class Employee 
{
    public string Name { get; set; }
    public string Email { get; set; }
    public string CityName { get; set; }
}

А так как выЕсли вы преобразуете в List, ваш метод должен вернуть List, поэтому ваш метод будет выглядеть следующим образом:

public List<Employee> GetEmployees()
{
    List<Employee> q =  (from n in db.Employees
                        join c in db.tblCities on n.ProjectID equals c.CityID

                         select new Employee 
                         {
                          Name =n.Name,
                          Email =n.Email,
                          CityName =c.CityName
                         }).ToList();

                   return q;
}

РЕДАКТИРОВАТЬ: при условии, что у вас есть настройка проекта в качестве WEB-API, вы можетеСоздайте свой API, сначала настроив метод Controller, который будет возвращать ваши данные:

public class EmployeeController : Controller
{
 [ProducesResponseType(typeof(Employee), 200)]
 [HttpGet("getEmployeeInfo")]
 public ActionResult GetEmployeeInformation()
 {

   var result = GetEmployees(); //Call your method wherever you have defined it

   return result == null ? (IActionResult)NoContent() : Ok(result);
  }

}

Чтобы получить доступ к вашему API, ваш путь будет выглядеть следующим образом: localhost / api / getEmployeeInfo

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