2012-02-07 5 views
0

を含む単一のDataTableから複数の列を取得します:LINQは私がフィールドを含む単一のデータテーブルを持ってグループ化し、合計

var query = (from lui in DTbatches.AsEnumerable() 
      where lui.TransactionDate >= BeginDate && 
      lui.TransactionDate < EndDate 
      group lui.TransactionID by lui.TransactionID into g 
      order by g.Key descending 
      select new TransactionIDListItem 
      { 
        TransactionID = g.Key, 
        ItemCount = g.Count() 
      }).ToList(); 

これは動作しますが、のみを返します。

SELECT TransactionID, TransactionDate, Sum(AdjustedValue), COUNT(*) AS ItemCount 
FROM DATATABLE 
WHERE TransactionDate >= BeginDate 
    and TransacationDate < EndDate 
GROUP BY TransactionID 
ORDER BY TransactionID DESCENDING 

は、私は、次の試してみましたTransactionIDおよび指定されたトランザクション内のレコード数。 TransactionDateフィールドとsum(AdjustedValue)フィールドも含めるようにLINQを変更するにはどうすればよいですか?あなたが複数の値を得るためにあなたのグループのために匿名型を作成する必要が

public int BatchID {get; set;} 
public DateTime TransactionDate {get; set;} 
public int ItemCount {get; set;} 
public decimal TotalValue {get; set;} 

答えて

1

マイTransactionIDListItemクラスは次のように定義されます。

group lui by new 
       { 
        lui.TransactionID, 
        lui.TransactionDate 
       } 
    into g 

これで、新しい値を追加するだけで済みます。 g.Keyはあなたの匿名タイプなので、グループ化したプロパティがあります。

select new TransactionIDListItem 
      { 
       TransactionID = g.Key.TransactionID, 
       TransactionDate = g.Key.TransactionDate, 
       TotalValue = g.Sum(x => x.AdjustedValue) 
       ItemCount = g.Count() 
      }).ToList(); 
+0

これは私が欠けていたものでした。ありがとうございました!また、 "少なくとも1つのオブジェクトがIComparableを実装する必要があります"というエラーを緩和するために、 "orderby.g.key"を "orderby.g.Key.TransactionID"に変更する必要がありました。 Lisa Zoglio Morgan [リンク](http://stackoverflow.com/questions/6467272/at-least-one-object-must-implement-icomparable)に感謝します。 – user1156862

関連する問題