首页 > 解决方案 > 将 SQL 查询转换为实体框架查询

问题描述

我需要翻译这个:

SELECT 
    `Code Query`.`Date Time`, 
    `Order Details`.scan AS `Order Number`, 
    `Code Query`.Platform, `Code Query`.`Config String`, 
    `Code Query`.`Firmware Version`, 
    `Code Query`.`Field Number`, `Code Query`.Error, 
    Machines.Description, `Code Query`.`Operator ID`, 
    Operators.name
FROM 
    `Code Query` 
LEFT OUTER JOIN
    Operators ON `Code Query`.`Operator ID` = Operators.id 
LEFT OUTER JOIN
    `Order Details` ON `Code Query`.OrderID = `Order Details`.ID 
LEFT OUTER JOIN
    Machines ON `Code Query`.`Machine Name` = Machines.`Machine Name`
WHERE 
    (`Date Time` BETWEEN '2021-09-07 00:00:00' AND DATE_ADD('2021-09-09 00:00:00', INTERVAL 1 DAY)) 
ORDER BY 
    `Date Time` DESC

进入实体框架查询。所以我尝试了一些东西,我有这个(没有错误)。

var startDate = DateTime.Parse("2021-09-07 00:00:00");
var oneDayLater = DateTime.Parse("2021-09-09 00:00:00").AddDays(1);
var codeQuery = (from cq in _context.CodeQuery.Where(x => x.DateTime >= startDate && x.DateTime <= oneDayLater).OrderByDescending(cq => cq.DateTime)
                                from ope in _context.Operators.Where(x => x.Id == cq.OperatorId).DefaultIfEmpty()
                                from ord in _context.OrderDetails.Where(x => x.id == cq.OrderId).DefaultIfEmpty()
                                from mac in _context.Machines.Where(x => x.MachineName == cq.MachineName).DefaultIfEmpty()
                                select new
                                {
                                    DateTime = cq.DateTime,
                                    OrderNumber = ord.Scan,
                                    Plztform = cq.Platform,
                                    //ConfigString = cq.ConfigString,
                                    FrimwareVersion = cq.FirmwareVersion,
                                    FieldNumber = cq.FieldNumber,
                                    Error = cq.Error,
                                    Description = mac.Description,
                                    OpeId = cq.OperatorId,
                                    OpeName = ope.Name
                                }).ToList();

问题是它不起作用。我无法真正调试,因为使用 try/catch 它会抛出异常“e”,它等于“null”。所以这对我知道发生了什么没有帮助。

我看到了其他类似的翻译帖子,但它们是非常简单的查询,没有加入内容。

谢谢你的任何建议。

标签: sqlentity-framework

解决方案


推荐阅读