1

ユーザーが編集または作成したドキュメントの数を数えたいと思います。したがって、情報 sth を含む Datatable があります。このような:

Input
DocumentName | ModifiedBy | CreatedBy
 a              Frank         Frank
 b              Mike          Frank
 c              John          Mike

それが出力になるはずです:

Name   DocumentsModified(Total)  DocumentsCreated(Total)
Frank      1                        2
Mike       1                        1
John       1                        0

したがって、人が編集したすべてのドキュメントをカウントするために行ったことは次のとおりです。

var query = from queryResult in resultTable.AsEnumerable()
group queryResult by queryResult.Field<string>("ModifiedBy") into rowGroup
select new 
{
    Name = rowGroup.Key, ModifiedDocuments = rowGroup.Count()
};

これはうまくいきます。ここで、列「Creator」の値もカウントする必要があります。これは可能ですか?もしそうなら、どうすればいいですか?OK、テーブルを反復処理できますが、LinQ クエリでこれを実現できればよいでしょう。

「新しい{}によるグループqueryResult」を使用しようとしましたが、正しい軌道に乗っているかどうかわかりません。

4

2 に答える 2

1

で同じ方法を使用することはできませんCreatedByか?

var query2 = from queryResult in resultTable.AsEnumerable()
group queryResult by queryResult.Field<string>("CreatedBy") into rowGroup
select new 
{
    Name = rowGroup.Key, ModifiedDocuments = rowGroup.Count()
};

次に、名前でソートされた2つのクエリを使用します。

于 2012-06-22T15:19:43.317 に答える
1

作成されたものと変更されたものを別々にクエリしてから、結果を結合して結合するのが最善の策です。

var modifiedCount = from queryResult in resultTable.AsEnumerable()
group queryResult by queryResult.Field<string>("ModifiedBy") into rowGroup
select new 
{
    Name = rowGroup.Key, ModifiedDocuments = rowGroup.Count()
};

var createdCount = from queryResult in resultTable.AsEnumerable()
group queryResult by queryResult.Field<string>("CreatedBy") into rowGroup
select new 
{
    Name = rowGroup.Key, CreatedDocuments = rowGroup.Count()
};

var finalResult = from first in modifiedCount 
                  join second in createdCount
                  on first.Name equal second.Name
                  select new 
                  {
                     first.Name,
                     first.ModifiedDocuments,
                     second.CreatedDocuments 
                  };
于 2012-06-22T15:27:50.247 に答える