2015-09-28 1 views
-1

Я пытаюсь отобразить название отдела, когда я вхожу сотрудников Фамилия на интерфейсе сайта, и это где я с проблемой !!! имен ExerciseDAL { общественного класса DepartmentDAO {Ошибка t t CS0266 Не удается неявно преобразовать тип «System.Linq.IQueryable <string>» в «» ExerciseDAL.Department

public DepartmentDAO() { } 

    public Department GetById(string departId) 
    { 

     Department reDpt = null; 
     DbContext _ctx; 

     try 
     { 
      _ctx = new DbContext(); 
      var departments = _ctx.Departments; 
      var dept = departments.AsQueryable<Department>().FirstOrDefault(dpt => dpt.Id.ToString() == departId); 
      reDpt = dept; 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Problem " + ex.Message); 
     } 
     return reDpt; 
    } 
} 
} 

Как вы можете видеть, где отходит я получаю CS0266 ошибок. dept.id - это объект, и мне приходится сравнивать его со строкой, но когда я делаю это, он не будет компилироваться.

Департамент Класс:

namespace ExerciseDAL 
{ 
public class Department 
{ 
    public ObjectId Id { get; set; } //represents primary key 
    public string DepartmentName { get; set; } 
} 
} 

DepartmentViewModel: Я буду также изменить код здесь, потому что я знаю, что это неправильно.

имен ExerciseViewModel { общественного класса DepartmentViewModel { частных DepartmentDAO _daos;

public string DepartmentsId { get; set; } //represents primary key 
    public string DepartmentName { get; set; } 

    public DepartmentViewModel() 
    { 
     _daos = new DepartmentDAO(); 
    } 



    public void GetByDepart() 
    { 
     try 
     { 
      Department dpt = _daos.GetById(DepartmentsId); 
      DepartmentsId = dpt.Id.ToString(); 
      DepartmentName = DepartmentName; 
     } 
     catch (Exception ex) 
     { 
      DepartmentsId = "not Found!"; 
     } 
    } 
} 
} 

DepartmentController: Я также буду менять код здесь, потому что я знаю, что это неправильно.

имен ExerciseWebSite { общественного класса DepartmentController: ApiController {

[Route("api/department/{departmentId}")] 
    public IHttpActionResult Get(string departmentId) 
    { 
     try 
     { 
      DepartmentViewModel dpt = new DepartmentViewModel(); 
      dpt.DepartmentsId = departmentId; 
      dpt.GetByDepart(); 
      return Ok(dpt); 
     } 
     catch (Exception ex) 
     { 
      return BadRequest("retrieve faild - " + ex.Message); 
     } 
    } 

} 
} 

Employee.js:

$(function() { 
$("#empbutton").click(function (e) { 
    var last = $("#TextBoxLastname").val(); 
    ajaxCall("Get", "api/employees/" + last, "").done(function (data) { 
     if (data.Lastname !== "not found") { 
      $("#email").text(data.Email); 
      $("#title").text(data.Title); 
      $("#firstname").text(data.Firstname); 
      $("#phone").text(data.Phoneno); 

      ajaxCall("Get", "api/department/" + data.Id) 
      .done(function (depdata) 
      { 
       $("#departmentname").text(depdata.DepartmentName); 
      }) 
      .fail(function (jqXHR, textStatus, errorThrown) 
      { errorRoutine(jqXHR); }); 
     }//end of if 
     else { 
      $("#firstname").text("Not Found"); 
      $("#email").text(""); 
      $("#title").text(""); 
      $("#phone").text(""); 
      $("#departmentname").text(""); 
     }//end of else 
    }).fail(function (jqXHR, textStatus, errorThrown) 
    { errorRoutine(jqXHR); });//end of ajax 
+2

Можете ли вы предоставить реальный код, а не скриншоты из кода? См. Эту статью -> http://stackoverflow.com/help/how-to-ask - В частности, раздел «Помогите другим воспроизвести проблему». – Jesse

+0

Хорошо, сделаю, я просто подумал, что это может быть проще для людей: p – Gorilla

ответ

1

Ваш "от ... где ..." выражение возвращает несколько отделов, но вам нужен только один.

Попробуйте это:

var dept = departments.Where(x=>x.Id == departId).Single(); 

Или изменить reDpt тип объекта из отдела к чему-то, что позволяет несколько значений, например, список.