.net临时表问题

问题描述

我有一个名为Sensor的c#.net核心项目。

public class Sensor
{
    public int Id { get; set; }
    public long timestamp { get; set; }
    [Display(Name = "Country")]
    public string country { get; set; }
    [Display(Name = "Region")]
    public string region { get; set; }
    [Display(Name = "Emitter")]
    public string emitter { get; set; }
    [Display(Name = "Value")]
    public string value { get; set; }
}

我需要获取以下数据:

国家和地区(称为标签)的组合及其出现的位置。 在该标签上,添加发射器并分别计算发生次数。

例如:

usa.south- 1000

usa.south.sensor01-700

usa.south.sensor02-300

canada.north- 1500

canada.north.sensor01-1250

canada.north.sensor02-250

我最初的想法是使用和temp表保存值,但是它不起作用。

CREATE TABLE _Results (Tag Varchar(150),Total Int)

INSERT INTO[_Results] (Tag,Total)"  
SELECT country  '.'  region AS Tag,COUNT() AS Total
FROM Sensor
GROUP BY country,region

INSERT INTO[_Results](Tag,Total)
SELECT country  '.'  region  '.'  emitter AS Tag,region,emitter

SELECT * FROM _Results

DROP TABLE _Results

但是我无法使它正常工作。

有人可以帮助我吗?没有可用的内存使用解决方案,因此我必须使用SQL和Microsoft.EntityFrameworkCore

解决方法

不需要临时表

SELECT country + '.' + region AS Tag,'' as Emitter,COUNT() AS Total
FROM Sensor
GROUP BY country,region
UNION
SELECT country + '.' + region AS Tag,Emitter,region,emitter

为标签,发射器和总计创建一个实体。 我们称之为统计。 在您的DBContext中声明一个dbset

public virtual DbSet<Statistic> Statistics { get; set; }

使用FromSql和AsNoTracking运行上述SQL

    query = context.Statistics
    .FromSql(sql)
    .AsNoTracking();

sql是保存在字符串中的上述SQL查询。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...