1

PK(id) - int、FK(ParentDepID) int、DepartmentName (Varchar) を持つテーブルが db にあります。これは部門接続のツリーです。問題は、 - 各部門の最初のレベルの要素の数を見つける - 子部門を持たないすべての部門を選択する - 子部門を持つすべての部門を選択する. 私は本当にlinqが初めてです((この問題を解決するのを手伝ってください。また、sqlについて読むことをお勧めします-linq。ありがとう。

4

1 に答える 1

0

ソリューションで 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)

于 2012-06-02T11:32:34.530 に答える