2009-07-06 70 views
1

这里是我的课是我的分组:C#Linq Group通过问题,可能真的很简单!

public class RefundTran : DataObjectBase<RefundTran> 
    { 
     public string ARTranID { get; set; } 
     public decimal Amount { get; set; } 
     public string ARTranTypeCode { get; set; } 
     public int CheckNumber { get; set; } 
     public int CustID { get; set; } 
     public string PaymentTypeCode { get; set; } 
     public string PostedFlag { get; set; } 
     public decimal TaxAmount { get; set; } 
     public string TranDate { get; set; } 
     public string RefNumber { get; set; } 
     public decimal Balance { get; set; } 
    } 

这里的列表<>:

List<RefundTran> trans = batchRefundToProcess.RefundCustomer.ARTransactions; 

而这里的LINQ查询到目前为止,我已经有了:

var TransGroupedByType = 
        from t in trans 
        group t by t.PaymentTypeCode into g 
        select new { CustID = g.First<RefundTran>().CustID, PaymentTypeCode = g.Key, TotalBalance = g.Sum (p=> p.Balance) }; 

基本上,我想要的是一组交易,键入paymentTypeCode和TotalBalance,其中包含该付款类型代码的RefundTran对象数组。

我错过了什么?

在此先感谢!通过t.PaymentTypeCode

+0

`TotalBalance `在这里不称为**键**。它只是投影对象的成员。 – 2009-07-06 17:41:08

+0

我认为你所要求的对我没有多大意义。你想通过paymentTypeCode和TotalBalance进行分组? TotalBalance是一个聚合器!? – 2009-07-06 17:41:09

+0

你能解释一下这个问题吗?您的解决方案或下面提供的解决方案有什么问题? – 2009-07-06 18:27:20

回答

2

看来你要交易的阵列也一样,你应该把它添加到匿名类型:

var TransGroupedByType = from t in trans 
         group t by t.PaymentTypeCode into g 
         select new { 
          CustID = g.First().CustID, 
          PaymentTypeCode = g.Key, 
          TotalBalance = g.Sum(p => p.Balance), 
          TransactionList = g.ToArray() 
         }; 
0

鲁汶考虑改变,为:

T组通过新的{t.PaymentTypeCode,t.TotalBalance}

它,你通过这两个属性要组。然后,您就可以访问g.Key.PaymentTypeCode,g.Key.TotalBalance