【问题标题】:how to cast var to long array?如何将 var 转换为长数组?
【发布时间】:2015-09-10 03:20:39
【问题描述】:

以下方法返回长数组。但是当我运行它时,得到错误:

指定的演员表无效。

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) 的数据类型很长。

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

【问题讨论】:

  • 您的查询选择了一个匿名类型,其中包含两个属性MonthConsumeTotalMonthConsumeTotalFuncHour。您希望如何将其转换为long 的数组? - 您只需要选择一个属性,并且该属性必须是 typeof long
  • @Stephen Muecke 我想在一个查询中选择两个属性。怎么样?
  • 您选择了 2 个属性,但不能将其返回为 long[]。不清楚具体如何使用数据,但您可以创建一个包含 2 个属性 long MonthConsumeTotallong MonthConsumeTotalFuncHour 的模型,并使用 select new yourModel { ..}return IEnumerable&lt;yourModel&gt;

标签: c# sql-server asp.net-mvc linq-to-sql


【解决方案1】:

您可能需要返回二维数组。

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

【讨论】:

  • 我使用此代码但显示错误:无法将类型 'long?[][]' 隐式转换为 'long[][]'
  • 现在我得到错误:不能将类型'long?[]'隐式转换为'long[]两个(总计和小时)
  • 检查更新.. MonthConsumeTotal 和 MonthConsumeTotalFuncHour 可以为空,因此您需要检查它是否有值并取值,否则取 0
【解决方案2】:

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

select new
{
   itm.MonthConsumeTotal,
   itm.MonthConsumeTotalFuncHour
}

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

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

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多