2

私は以下のようなテーブルを持っています。提供されたユーザー 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()
}

すべてのマネージャーの雇用率を返すようにクエリを変更するにはどうすればよいですか?

助けてください。

4

3 に答える 3

2

これは、単一の LINQ 式では実行できません。これをループで実行する必要があります。

より良いオプションは、データベースでこれを行い、結果を LINQ に返すことです。

見る:

于 2013-01-17T07:19:58.720 に答える
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;
}

または再帰的に

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;
}
于 2013-01-17T07:49:40.933 に答える
0

別のパターンを使用する必要があります。

クエリを取得することを確認しましょう。

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();
于 2013-01-17T07:22:14.957 に答える