【问题标题】:当我启动程序时,我从查询中得到错误
【发布时间】:2022-01-22 22:04:13
【问题描述】:

您好,我使用 c# 和 swagger 开发 Web 应用程序。我有问题。为什么我接受了这个例外?

public AsiCovidDto GetAsiCovid()
{
    using(SirketDBContext context=new SirketDBContext())
    {
        var query = 
            from c in context.Covids
            group c by 1 into g
            select new AsiCovidDto
            {
                AsiCovidOrani = g.Sum(x => x.AsiDurumu == "1" ? 1 : 0) / g.Max(x => x.CovidId)

            };
        //exception  return (AsiCovidDto)query;
    }
}

异常

【问题讨论】:

  • group c by 1 的意义何在?
  • GroupBy(x => 1) by constant 将使您能够在一个表达式中使用两个聚合
  • 下次请使用标签来表明你使用的是哪个ORM以及哪个版本。我假设一些实体框架版本。

标签: asp.net linq


【解决方案1】:

现在您只有结果对象(IQueryable<T>),正如您的异常状态所示。

这不提供所需类型的强制转换。 您需要做的是通过IQueryable<T> 提取您的对象 query.First()

【讨论】:

  • 更好First(),这个查询总是返回一条记录。
  • 如果它包含数据,它将返回一条记录。总是。就像SELECT COUNT(*) FROM Table - 总是返回一条记录来显示有多少条记录。
  • 好的,改了^^
  • 不幸的是,大摇大摆地返回 0。我没想到会这样。我想知道我的 linq 错了吗?
  • Youve got what you have asked. Cast to (double)g.Max(x => x.CovidId)` 再试一次。
猜你喜欢
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多