2015-01-14 1 views
0

Я пытаюсь сделать оператор LINQ, используя три таблицы базы данных для моего третьего раскрывающегося списка. Ниже приведены мои коды, но я получаю сообщение об ошибке (для моего третьего раскрывающегося списка), когда я выбираю кластер во втором раскрывающемся списке.Как запрограммировать sql-запрос с внутренним соединением в ASP.Net MVC?

**//SECTORS** 
    public JsonResult GetSectors() 
    { 
     using (SAMPDBEntities context = new SAMPDBEntities()) 
     { 
      var ret = context.SECLIBs 
       .Select(x => new { x.seccd, x.unitacro }).ToList(); 
      return Json(ret, JsonRequestBehavior.AllowGet); 
     } 
    } 

    **//CLUSTERS** 
    public JsonResult GetCluster(string seccd) 
    { 
     using (SAMPDBEntities context = new SAMPDBEntities()) 
     { 
      var ret = context.CLUSLIBs 
       .Where(x => x.seccd.Contains(seccd)) 
       .Select(x => new { x.cluscd, x.unitdesc }).ToList(); 
      return Json(ret, JsonRequestBehavior.AllowGet); 
     } 
    } 

    **//EMPLOYEES** 
    public JsonResult GetEmployee(string cluscd) 
    { 
     using (SAMPDBEntities context = new SAMPDBEntities()) 
     { 
      var ret = context.UNILIBs 
       .Where(a => a.cluscd.Contains(cluscd)) 
       .Include(x => x.PPSAs.Select(y => y.EMPFILE.empno)) 
       .ToList(); 

      return Json(ret, JsonRequestBehavior.AllowGet); 
     } 
    } 

Вот моя ошибка:

A specified Include path is not valid. The EntityType 'SAMPDBModel.EMPFILE' does not declare a navigation property with the name 'empno'.

и вот запрос SQL (для моего третьего DropDownList):

SELECT DISTINCT e.empno, e.lname, e.fname, e.mname, c.cluscd 
    FROM SECLIB a 
    INNER JOIN CLUSLIB b 
    ON a.seccd = b.seccd 
    INNER JOIN UNILIB c 
    ON b.cluscd = c.cluscd 
    INNER JOIN PPSA d 
    ON c.unitcode = d.unitcd 
    INNER JOIN EMPFILE e 
    ON d.empno = e.empno 
    WHERE e.empstat = 1 AND c.cluscd = @cluscd 

мне нужно сделать каскадный DropDownList, и мне нужно, чтобы показать список сотрудников на основе выбранного сектора и кластера. Как это сделать, используя несколько таблиц? Пожалуйста, помогите мне. Заранее спасибо!

ответ

0

Это должно быть проблема не указания правильного соответствующего имени, которое генерируется EDMX. Пожалуйста, вы можете проверить класс «EMPFILE», созданный в Entity Framework. Он должен иметь схожее имя с различным регистрозависимым словом.

При запросе в SQL он не беспокоится о чувствительности к регистру. Но C# - чувствительный к регистру язык.

И лучше, если вы можете разместить здесь класс «EMPFILE» и таблицу базы данных.