如何将 var 转换为长数组?

how to cast var to long array?

下面的方法returns long数组。但是当我 运行 它时,出现错误:

specified cast is not valid.

public long[] GetLastMonthConsume(long metid)
{

   var lastconsume = (from itm in db.tblMonthConsumes
                            where itm.MetID_FK == metid && itm.MonthConsumeDate ==
                                (from itm2 in db.tblMonthConsumes
                                 where itm2.MeterID_FK == metid
                                 select itm2.MonthConsumeDate).Max()
                            select new
                            {
                                itm.MonthConsumeTotal,
                                itm.MonthConsumeTotalFuncHour
                            }).ToList();

    return lastconsume.Cast<long>().ToArray();
}

此错误发生在:

return lastconsume.Cast<long>().ToArray();

(MonthConsumeTotalFuncHour,MonthConsumeTotal) 的数据类型很长。

这个演员表有误?如何获取查询的输出并转换为长数组???

lastConsume 是您使用的匿名类型对象的列表:

select new
{
   itm.MonthConsumeTotal,
   itm.MonthConsumeTotalFuncHour
}

现在您正试图将其转换为显然不兼容的 long。因此,编译器显示错误。

如果您希望 return 包含两个长数字的项目列表,则必须更改方法签名。

您可能需要 return 二维数组。

public long[][] GetLastMonthConsume(long metid)
{

   var lastconsume = (from itm in db.tblMonthConsumes
                            where itm.MetID_FK == metid && itm.MonthConsumeDate ==
                                (from itm2 in db.tblMonthConsumes
                                 where itm2.MeterID_FK == metid
                                 select itm2.MonthConsumeDate).Max()
                            select new
                            {
                               total = (itm.MonthConsumeTotal!= null && itm.MonthConsumeTotal.HasValue) ? itm.MonthConsumeTotal.Value : 0,
                               hour = (itm.MonthConsumeTotalFuncHour!= null && itm.MonthConsumeTotalFuncHour.HasValue) ? itm.MonthConsumeTotalFuncHour.Value : 0
                            }).ToList();

    return lastconsume.Select(t => new long[] {t.total , t.hour }).ToArray();
}