5

私はSQLクエリを持っています:

SELECT 
      node.GroupName
    , depth = COUNT(parent.GroupName) - 1
FROM CompanyGroup node
JOIN CompanyGroup parent ON node.LeftID BETWEEN parent.LeftID AND parent.RightID
GROUP BY node.GroupName, node.LeftID
ORDER BY node.LeftID;

私はそれを自分でLINQに変換しようとしましたが、言語に慣れていません。いくつかの調査の後、Linqerを使用してみましたが、関数「BETWEEN」または「COUNT」を変換しません。

私がこれまでに得た最も近いものは次のとおりです。

        var groupModel =
            from node in db.CompanyGroups
            join parent in db.CompanyGroups.Where(node.LeftID > parent.LeftID && node.LeftID < parent.RightID)
            orderby node.LeftID
            select node.GroupName;

これは機能せず、「深さ」が返されたとしても返されません。助けてください!

編集:

クエリは、階層の表現を作成できるように、ネストされたセット内のノードの深さを順番に返すために使用されます。私はこのチュートリアルに従っています: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/の章の「ノードの深さを見つける」

4

2 に答える 2

0

次のようなものを追加する必要があります。

group CompanyGroup by node.GroupName into g
select new
{
    node= g.GroupName,
    left = select 
       new 
       { 

          left = 
          from CompanyGroup  in g 
          group CompanyGroup  by CompanyGroup. into mg 
          select new { left=mg.LeftID } 
       } 
};
于 2013-05-30T09:45:45.287 に答える