【问题标题】:LINQ to SQL retrieve multiple columns from single datatable including grouping and sumLINQ to SQL 从单个数据表中检索多个列,包括分组和求和
【发布时间】:2012-02-07 20:46:19
【问题描述】:

我有一个包含字段的数据表:

TransactionID (int),
TransactionDate (DateTime)
AdjustedValue (decimal)

我想在 LINQ 中实现以下 SQL 的等价物:

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

我尝试了以下方法:

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();

这可行,但仅返回 TransactionID 和指定事务中的记录数。我应该如何修改我的 LINQ 以包括 TransactionDate 和 sum(AdjustedValue) 字段?

我的TransactionIDListItem 类定义为:

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

【问题讨论】:

    标签: sql linq group-by


    【解决方案1】:

    您需要为您的组创建一个匿名类型以获取多个值。

    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();
    

    【讨论】:

    • 这就是我所缺少的。谢谢!对于它的价值,我还需要将“orderby g.key”更改为“orderby g.Key.TransactionID”以缓解“至少一个对象必须实现 IComparable”错误。感谢 Lisa Zoglio Morgan link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多