首页 > 解决方案 > .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; }
}

我需要得到以下数据:

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

前任:

美国南部 - 1000

usa.south.sensor01 - 700

usa.south.sensor02 - 300

加拿大.北 - 1500

canada.north.sensor01 - 1250

canada.north.sensor02 - 250

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

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, COUNT() AS Total
FROM Sensor
GROUP BY country, region, emitter

SELECT * FROM _Results

DROP TABLE _Results

但我不能让它工作。

有人能帮我吗?内存使用解决方案不可用,所以我必须使用 SQL 和 Microsoft.EntityFrameworkCore

标签: c#sqlasp.netentity-framework-core.net-3.0

解决方案


不需要临时表

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

为 Tag、Emitter 和 Total 创建一个实体。我们称之为统计。在 DBContext 中声明一个 dbset

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

使用 FromSql 和 AsNoTracking 运行上述 SQL

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

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


推荐阅读