我有如下表格。我需要为所提供的用户ID获取所有经理ID。
userid managerid
10 1
9 10
6 9
2 6
4 1
如果我将2传递给我的方法,我需要得到1,10,9和6.我写了下面的查询,它只会返回第一级父级。即它只返回6& 9。
public List<int?> mymethod (int userId){
return (from e in mycontext.EmployeeManagers
join e1 in m_context.EmployeeManagers
on e.UserId equals e1.ManagerId
where e1.UserId == userId
select e1.ManagerId).AsQueryable().ToList()
}
如何修改查询以返回所有经理雇员?
请帮忙。
答案 0 :(得分:2)
你不能在一个sinqle LINQ表达式中这样做。你必须循环运行它。
更好的选择是在数据库中执行此操作,然后将结果返回到LINQ。
见:
答案 1 :(得分:1)
我只是像这样运行一个短循环(抱歉无效大写,从头开始编码):
public List<Int> GetAllManagers(int userID)
{
var result = new List<int>();
int index = 0;
result.add(userID); // start with user (it will be removed later)
while (index < result.count)
{
var moreData = from e in mycontext.EmployeeManagers
where e.UserId == result[index];
select e.ManagerId;
foreach (int id in moreData)
if (result.indexOf(id)==-1)
result.add(id);
index++;
}
result.delete(0);
return result;
}
或recursevly
private void AddUniqueIds (List<int> elements, ref List<int> list)
{
foreach (int id in elements)
if (list.indexOf(id)==-1)
list.add(id);
}
public List<int> GetAllManagers(int userID)
{
var result = new List<int>();
var moreData = from e in mycontext.EmployeeManagers
where e.UserId == result[index];
select e.ManagerId;
foreach (int id in moreData)
AddUniqueIds(result, GetAllManagers(id));
return result;
}
答案 2 :(得分:-1)
您需要使用不同的模式。
让我们看看你的问题。
var query = myContext.EmployeeManagers
然后,你可以join
,但是你想要
for(int = 0; i < 5; i++)
{
query = query.Join( ... ..., i, ... ); // Can't recall all
// the parameters right now.
}
然后执行它:
var result = query.ToList();