c# - orderby 无法使用 LINQ 获取子查询中的前 1 个结果

标签 c# mysql entity-framework linq

我正在尝试使用子查询从子表中获取前 1 个结果。当我尝试使用 orderby 或 OrderByDescending 并使用子查询时,它会抛出

NullReferenceException

。在不使用 orderby 或 OrderByDescending 的情况下,我的查询会成功执行。 但我想获取子查询的最后一条记录。我的应用程序与Mysql数据库连接。

我的代码如下

var result = (from ud in db.user_devices
                          join a in db.access_info on ud.u_id equals a.u_id
                          join d in db.device_num on ud.dev_id equals d.DevId
                          //let pi = db.packet_info.Where(x =>  x.DevId == ud.dev_id && x.DevId != null).OrderByDescending(x =>x.systime).FirstOrDefault()
                          //where  pi != null
                          select new
                          {
                              fuel = db.packet_info.Where(x => x.DevId == ud.dev_id).OrderByDescending(x => x.systime).Select(x => x.fuel).FirstOrDefault(),
                              //removed other fields
                          }).ToList();

最佳答案

使用替代方法,创建一个与 linq 具有相同架构的过程。

程序代码如下:

CREATE DEFINER=`abc`@`%` PROCEDURE `spGetAllVechiles`()
BEGIN
    SELECT 

       (SELECT g.fuel  FROM abc.Packet_Info AS g WHERE g.devid = ud.dev_id order by systime desc LIMIT 0,1 ) AS fuel,
       (SELECT  g.fencealarm FROM abc.Packet_Info AS g WHERE g.devid = ud.dev_id order by systime desc LIMIT 0,1 ) AS fencealarm,
       (SELECT  g.speed  FROM abc.Packet_Info AS g WHERE g.devid = ud.dev_id order by systime desc LIMIT 0,1 ) AS speed,
       (SELECT  g.Latitude FROM abc.Packet_Info AS g WHERE g.devid = ud.dev_id order by systime desc LIMIT 0,1 ) AS Latitude,
       (SELECT  g.Longitude FROM abc.Packet_Info AS g WHERE g.devid = ud.dev_id order by systime desc LIMIT 0,1 ) AS Longitude
       //other params...

    FROM abc.access_info AS ac 
    INNER JOIN abc.user_devices AS ud ON ud.u_id = ac.u_id
    INNER JOIN abc.device_num AS dn ON dn.DevId = ud.dev_id;

关于c# - orderby 无法使用 LINQ 获取子查询中的前 1 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575981/

相关文章:

c# - 带有 MVC 4 的 VS 2010 中关于缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用的警告消息

php - 如果有值则更新行,如果没有则插入

c# - 转换具有多个对象的 IEnumerable 时,ToList() 花费很长时间

c# - 如何在 EF core 2.1 中使用 FreeText

c# - 如何使用 Linq 订购集合属性?

c# - JSONObject 中每个 JSONnode 的 Unity

c# - 在 C# 中处理序列化异常

c# - 使用 webAPI Bearer Token 的 SignalR 身份验证

mysql - 如何在不选择的情况下为 SQL 查询部分创建别名

c - mysqlclient.lib 的来源在哪里?