LINQ-запрос с выражением Distinct и WHERE - PullRequest
0 голосов
/ 21 января 2019

Мой отдельный запрос работает нормально, но мне нужно поместить предложение WHERE в другой метод.

Это мой рабочий запрос для поиска различных менеджеров

public static IEnumerable<DTO.Employee> GetDistinctMgrs()
{
    IEnumerable<DTO.Employee> managers = EmpCache.EmployeeList.GroupBy(x => x.MgrID).Select(x => x.FirstOrDefault());
    return managers;
}

Здесь я пытаюсь выдавить ГДЕ, чтобы получить менеджера сотрудника из отдельного списка менеджеров. Но с предложением WHERE я получаю "Перечисление не дало результатов"

public static IEnumerable<DTO.Employee> GetDefaultMgr(string EMPID)
{
    IEnumerable<DTO.Employee> manager = EmpCache.EmployeeList
            .Where(s => s.EmpID == EMPID)
            .GroupBy(x => x.MgrID)
    .Select(x => x.FirstOrDefault());

     return manager; //<- "Enumeration yielded no results"
}

Ответы [ 2 ]

0 голосов
/ 21 января 2019

Я бы сделал это

 public static IEnumerable<DTO.Employee> GetDefaultMgr(string EMPID)
 {
               IEnumerable<DTO.Employee> manager = 
               from mng in EmpCache.EmployeeList
                where mng.EmpID.ToLower() == EMPID.ToLower()
                orderby mng.MgrID
                select mng;
               return manager;
    }

или

public static IEnumerable<DTO.Employee> GetDefaultMgr(string EMPID)
{
    IEnumerable<DTO.Employee> manager = EmpCache.EmployeeList
            .Where(s => s.EmpID.ToLower() == EMPID.ToLower())
            .GroupBy(x => x.MgrID)
    .Select(x => x.FirstOrDefault()).ToList();

     return manager; //<- "Enumeration yielded no results"
}

На основе вашего нового вопроса

 public static  string GetDefaultMgr(string EMPID)
    {
       string managerID = EmpCache.EmployeeList
                .Where(s => s.EmpID.ToLower() == EMPID.ToLower())
                .GroupBy(x => x.MgrID)
        .Select(x => x.MgrID).FirstOrDefault().ToString();

         return managerID; //<- "Enumeration yielded no results"
    }
0 голосов
/ 21 января 2019

Что вы делаете, это отправляете запрос в базу данных, и когда запрос завершается, вы делаете групповое и т. Д.

, поэтому, когда база данных ничего не возвращает, вы получаете исключение

здеськак бы я это сделал

public static IEnumerable<DTO.Employee> GetDefaultMgr(string EMPID)
 {
  IEnumerable<DTO.Employee> manager = EmpCache.EmployeeList
            .Where(s => s.EmpID == EMPID)
             .GroupBy(x => x.MgrID);
           if(manager?.Count()>0)
            return manager.Select(x => x.First());

       return null;
    }
...