【问题标题】:Cannot convert source type to System.Nullable<double>无法将源类型转换为 System.Nullable<double>
【发布时间】:2016-03-08 06:40:04
【问题描述】:

这是我的脚本:

public PlainBrgDataSummaryComplete SummaryComputationPerTransSQLite(long    ProgramID)
{
    PlainBrgDataSummaryComplete result = new  PlainBrgDataSummaryComplete();
    DataSet dataSet = GetPlainBrgDataSQLite(ProgramID);

    var abcde  = dataSet.Tables["dataBridge"]
        .AsEnumerable()
        //.Where(a => Convert.ToDateTime(a["reportingDate"].ToString()) >= startOfWeek1 && Convert.ToDateTime(a["reportingDate"].ToString()) < endOfWeek1.AddDays(1))
       .GroupBy(a => 1)
        .Select(d =>
            new PlainBrgDataSummaryTrans
            {
                transactionWk6 = d.Sum(a => a.Field<double?>("TranCount"))

            }
        ).FirstOrDefault();

    result.totaltransaction = new PlainBrgDataSummaryTrans
    {
        transactionWk6 = abcde;
    };

    return result;
}

我收到错误消息 - 无法将源类型转换为 System.Nullable&lt;double&gt;。具体上transactionWk6 = abcde部分;

【问题讨论】:

  • PlainBrgDataSummaryTrans 类中 transactionWk6 的类型是什么?
  • 公开双份? transactionWk6 { 得到;放; }
  • 你在 RunTime 中得到错误吧?
  • 您将PlainBrgDataSummaryTrans 类转换为double?,默认情况下是不允许的。
  • 你真正想要达到什么目的?这是一个非常奇怪的查询,尤其是按常量分组。

标签: c# angularjs


【解决方案1】:

abcde 已经是 PlainBrgDataSummaryTrans 类型,因为您将 select 语句投射到它。

尝试像这样使用它:

result.totaltransaction = abcde;
return result;

【讨论】:

  • 如果我有另一个变量怎么办: var fghi = dataSet.Tables["dataBridge"] .AsEnumerable() //.Where(a => Convert.ToDateTime(a["reportingDate"]. ToString()) >= startOfWeek1 && Convert.ToDateTime(a["reportingDate"].ToString()) 1) .Select(d => new PlainBrgDataSummaryTrans { transactionWk5 = d.Sum(a => a.Field("TranCount")) } ).FirstOrDefault();
  • 如何将其包含在返回结果中。我试过了,它只返回了 1 个 result.totaltransaction = abcde;结果.totaltransaction = fghi;返回结果;
  • 仍然是一样的:您将select 语句投影到PlainBrgDataSummaryTrans 对象中,这就是您必须在方法中返回的内容。
  • 您有多个要返回的 linq 查询?或者它是产生枚举的单个查询?
  • 我试过了,它只返回了最后一个:result.totaltransaction = abcde;结果.totaltransaction = fghi;返回结果;
【解决方案2】:

Mihail Stancescu 应该可以解决这个问题。但是考虑到您的返回类型,您不需要额外的分配。您可以更改如下代码

public PlainBrgDataSummaryComplete SummaryComputationPerTransSQLite(long    ProgramID)
{
DataSet dataSet = GetPlainBrgDataSQLite(ProgramID);

return dataSet.Tables["dataBridge"]
    .AsEnumerable()
    //.Where(a => Convert.ToDateTime(a["reportingDate"].ToString()) >= startOfWeek1 && Convert.ToDateTime(a["reportingDate"].ToString()) < endOfWeek1.AddDays(1))
   .GroupBy(a => 1)
    .Select(d =>
        new PlainBrgDataSummaryTrans
        {
            transactionWk6 = d.Sum(a => a.Field<double?>("TranCount"))

        }
    ).FirstOrDefault();

}

【讨论】:

  • 返回类型为PlainBrgDataSummaryComplete
猜你喜欢
  • 2015-09-21
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 2023-04-03
相关资源
最近更新 更多