如何使用 dataSet.Tables 查询获取日期月份和年份编号

How to get Date Month and Year Number using dataSet.Tables query

我使用 Linq 查询来获取月份和年份数字值,我的查询是:

brgData.Where(t => t.reportingDate != null && t.reportingDate.Value.Month == month4 && t.reportingDate.Value.Year == month4Year).Sum(t => t.TranCount)

我想使用 dataSet.Tables 查询实现相同的逻辑,但出现错误:

Cannot resolve symbol 'Value'.

下面是我的查询:

var transactionMnth4 = dataSet.Tables["dataBridge"]
           .AsEnumerable()
           .Where(a => Convert.ToDateTime(a["reportingDate"].ToString()) != null && Convert.ToDateTime(a["reportingDate"].ToString()).Value.Month == month4 && Convert.ToDateTime(a["reportingDate"].ToString()).Value.Year == month4Year)
           .GroupBy(a => 1)
           .Select(d =>
               d.Sum(a => a.Field<double?>("TranCount"))
           ).FirstOrDefault();

删除.ValueDateTime不是Nullable<DateTime>

var transactionMnth4 = dataSet.Tables["dataBridge"]
   .AsEnumerable()
   .Where(a => a["reportingDate"].ToString() != null 
        && Convert.ToDateTime(a["reportingDate"].ToString()).Month == month4 
        && Convert.ToDateTime(a["reportingDate"].ToString()).Year == month4Year)
   .GroupBy(a => 1)
   .Select(d =>
       d.Sum(a => a.Field<double?>("TranCount"))
   ).FirstOrDefault();

但是如果该列实际上是一个可以为 null 的 DateTime 列,则您不需要首先将其转换为字符串。然后使用Field扩展方法:

var transactionMnth4 = dataSet.Tables["dataBridge"]
   .AsEnumerable()
   .Where(a => a.Field<DateTime?>("reportingDate").HasValue 
           && a.Field<DateTime?>("reportingDate").Value.Month == month4 
           && a.Field<DateTime?>("reportingDate").Value.Year == month4Year)
   .GroupBy(a => 1)
   .Select(d => d.Sum(a => a.Field<double?>("TranCount")))
   .FirstOrDefault();

(虽然不确定你在那里总结了什么)