3

DataTable があり、列でグループ化したいと考えています。

私はそれのためにこのコードを使用します:

DataTable  dtList = list1.Items.GetDataTable();
         var grouped = from row in dtList.AsEnumerable()
                      group row by row["T"] into valueGroup
                      select new { Value = valueGroup.Key, ID = valueGroup.Max(id => id["ID"]) };

私の問題は次のとおりです。2つの列(id、value)を選択することです。乗算列を選択したい。

dtlist の他の列を選択するには?

4

2 に答える 2

2

グループ化する複数の列を選択する場合は、次のようにしてください。

DataTable  dtList = list1.Items.GetDataTable();
var grouped = from row in dtList.AsEnumerable()
                      group row by new { T = row["T"], U = row["U"] } into valueGroup
                      select new { Value = valueGroup.Key, ID = valueGroup.Max(id => id["ID"]) };

これにより、戻りセットのフィールドでアクセス可能なプロパティTを持つ匿名型オブジェクトとして返される複数の列が得られます。UValue

これをテストしたところ、サンプル データ セットで動作するようです。

ここで説明されているソリューションに基づいています: http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/54f6ac70-e74c-4d9d-a9ee-6373714c0755

編集

句を使用group byすると、すべてのアイテムがグループに分割され、各グループに対して 1 つのアイテムのみが返されるため、列を参照するには、それを句に入れるかgroup by、集計メソッドを使用する必要があります (IDフィールドで行ったように)およびMax()方法)。

ただし、グループを作成する場合は、各グループの最大値IDを取得してから、それらの項目の他の列を取得します(各グループの最大値を使用) 。同じテーブルでIDを使用できます。このコードは、サンプルと列joinの場合にそれを行う方法を示しています。テストデータセットで正しく動作しているようです:TU

var dtListEnumerable = dtList.AsEnumerable();
//group items and get max ID for each group
var groupedTemp = from row in dtListEnumerable
          group row by row["T"] into valueGroup
          select new { Value = valueGroup.Key, ID = valueGroup.Max(id => id["ID"]) };

//join to get the rest of columns for each item with max ID returned for each group
var grouped = from groupedItem in groupedTemp
          join row in dtListEnumerable on groupedItem.ID equals row["ID"]
              into tablesJoined
          from row in tablesJoined.DefaultIfEmpty()
          select new
          {
              ID = groupedItem.ID,
              T = row["T"], 
              U = row["U"]
          };

これについて何か助けが必要な場合は、お知らせください。取得したいデータが返されない場合は、詳細をお知らせください。

于 2012-08-26T09:57:49.727 に答える
1

dtList にある複数の列 (column1、column2、column3) を選択するには:

DataTable  dtList = list1.Items.GetDataTable();
var grouped = from row in dtList.AsEnumerable()
                  group row by row["T"] into valueGroup
                  select new {
                         Value = valueGroup.Key,
                         ID = valueGroup.Max(id => id["ID"]),
                         col1 = row["column1"].ToString(),
                         col2 = row["column2"].ToString(),
                         col3 = row["column3"].ToString()
                          };
于 2012-08-26T09:47:01.833 に答える