带有 Distinct 和 WHERE 子句的 LINQ 查询
LINQ query with Distinct and WHERE clause
我的 Distinct 查询工作正常,但我需要在另一个方法中放置一个 WHERE 子句。
这是我检索不同经理的工作查询[=12=]
public static IEnumerable<DTO.Employee> GetDistinctMgrs()
{
IEnumerable<DTO.Employee> managers = EmpCache.EmployeeList.GroupBy(x => x.MgrID).Select(x => x.FirstOrDefault());
return managers;
}
这里是我试图挤压 WHERE 以从不同的经理列表中获取员工经理的地方。但是使用 WHERE 子句我得到 "Enumeration yielded no results"
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"
}
你正在做的是向数据库发送一个请求,当请求完成后你做你的 groupby 等等。
所以当 db return 什么都没有时你会得到异常
这是我的做法
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;
}
我愿意
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"
}
我的 Distinct 查询工作正常,但我需要在另一个方法中放置一个 WHERE 子句。
这是我检索不同经理的工作查询[=12=]
public static IEnumerable<DTO.Employee> GetDistinctMgrs()
{
IEnumerable<DTO.Employee> managers = EmpCache.EmployeeList.GroupBy(x => x.MgrID).Select(x => x.FirstOrDefault());
return managers;
}
这里是我试图挤压 WHERE 以从不同的经理列表中获取员工经理的地方。但是使用 WHERE 子句我得到 "Enumeration yielded no results"
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"
}
你正在做的是向数据库发送一个请求,当请求完成后你做你的 groupby 等等。
所以当 db return 什么都没有时你会得到异常
这是我的做法
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;
}
我愿意
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"
}