【发布时间】:2018-02-28 09:56:51
【问题描述】:
我将传感器数据存储在 sql 数据库中。每个条目都有一个 device_id、timestamp、value 和一些其他属性。
我想实现一个 webapi 函数,它返回我从传感器设备接收到的第一个和最后一个事件。所以我的序列化 DTO 应该是这样的:
{ "start": <timestamp:long>, "end": <timestamp:long>, "deviceid": <someid:string>}
我正在使用 Entityframework Core 来访问我的数据库。我可以毫无问题地获得唯一设备 ID 的列表。如果我尝试获取每个设备的时间戳的最小值或最大值,我的 dbcontext 会引发无效操作异常。
我尝试了几件这样的事情:
var deviceList=_context.Data.Select(d=>d.DeviceId).Distinct();
foreach(string deviceId in deviceList)
{
var max = _context.Data.Where(g=>g.DeviceId==deviceId).Max(c=>c.Timestamp);
var min ...
}
这个 sn-p 从 clr 抛出一个无效的操作异常。据我了解,它创建了一个不在服务器端执行的语句。我的问题是如何创建一个查询来请求 dbcontext 上的最小值和最大值(每个设备)?另外我想知道推荐的实现方式是什么,这样它就不会在客户端执行。
谢谢维尔纳。
【问题讨论】:
-
有什么异常?
-
我建议不要将 EF Core 用于生产,除非您的应用程序非常简单。
标签: sql-server linq entity-framework-core