PK(id) - int、FK(ParentDepID) int、DepartmentName (Varchar) を持つテーブルが db にあります。これは部門接続のツリーです。問題は、 - 各部門の最初のレベルの要素の数を見つける - 子部門を持たないすべての部門を選択する - 子部門を持つすべての部門を選択する. 私は本当にlinqが初めてです((この問題を解決するのを手伝ってください。また、sqlについて読むことをお勧めします-linq。ありがとう。
1 に答える
ソリューションで LINQ を使用する方法を知っていると思いますが、そうでない場合は、この基本的な LINQ to SQL シナリオや、DataContext をデータベースに接続する方法など、いくつかのスターター チュートリアルを参照してください。DataContext を設定したら、LINQ クエリの記述を開始できます。
最初の問題のクエリは次のようになります。
var firstLevelQuery = from d in db.Departments
where d.ParentDepID == null
select d;
これにより、 を持たず、ParentDepID
したがってツリーのルート ノードである、テーブル内のすべての部門が検索されます。これらの数を数えるには、 を使用しますfirstLevelQuery.Count();
。これらを として操作するIQueryable<Department>
ことも、 を使用してリストにキャストすることもできますList<Department> firstLevelDepartments = firstLevelQuery.ToList();
。
親である部門を見つけるのは難しいため、ここでは複数のクエリを使用する必要があります。最初に、部門テーブルで参照されているすべての ID を見つけてから、それらの ID の 1 つに一致するすべての部門を探します。
var innerQuery = from d in db.Departments select d.ParentDepID;
var parents = from p in db.Departments
where innerQuery.Contains<int>(p.ParentDepID)
select p;
Contains ステートメントを否定することで、親ではないレコードを取得できるはずです。where !innerQuery.Contains<int>(m.GameTypeId)