2011-10-27 6 views
0

DataTableには、ReportIdとParentReportIdという2つの列があります。親がDataTableにまだリストされていないすべてのレポートを選択したいとします。私は(SQLの構文から取って)このような何かをしたいが、私は、これは動作しません知っている:DataTableの階層データに対して自己参照選択を行う方法

DataRow[] foo = drParentRow = dt.Select("ParentReportId NOT IN(ReportId)"); 

どのように私はこのような状況では、このデータセットからこれらのレコードを取得できますか?

答えて

0
var noParents = dt.AsEnumerable().Where(x => x["ReportParentID"] != DBNull.Value && 
             !dt.rows.Any(y => y["ReportID"] == x["ReportParentID"]); 
+0

dt.Rows .Where()メソッドを持っていません。私はSystem.DataとSystem.Linqを使用しています。 –

+0

数分前に答えを更新したので、dt.AsEnumerable()を実行する必要があります。 –

+0

ちょっとメモ:C#の人々がDataTableのLINQクエリに明示的に 'AsEnumerable()なぜなら、私はVBでそうするつもりはないからです。今私はこれが(いくつかの)VB.NETの利点の一つであることを知っています(通常VBはより冗長です):http://blogs.msdn.com/b/vbteam/archive/2008/05/14/how-linq- to-dataset-works-in-vb-jonathan-aneja.aspx –

0

私はあなたがこのためにいくつかのLINQを使用する必要があるとしていると思う:

var reportIds = dt.AsEnumerable().Select(row => row.Field<int>("ReportId")); 

var foo = from row in dt.AsEnumerable() 
      let parentReportId = row.Field<int>("ParentReportId") 
      where !reportIds.Contains(parentReportId) 
      select row; 
関連する問題