问题描述
我有一个名为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查询。