将此 SQL 语句转换为 LINQ

本文关键字:LINQ 转换 语句 SQL 将此 | 更新日期: 2023-09-27 17:56:51

我是 LINQ

的新手,在 LINQ 中有效地编写此查询时遇到了一些困难。

SELECT ID, UniqueID, RouteHeaderID, RouteObjectState, OriginalRouteUniqueID
FROM  dbo.MeterReadingOrderERPRouteCreateResponses
WHERE (ID NOT IN (SELECT MeterReadingOrderERPRouteCreateResponseID
                  FROM  dbo.Tasks
                  WHERE (TaskType = 'MeterReading')))

请帮忙吗?我从以下位置尝试了此解决方案:您将如何使用 LINQ 执行"不在"查询? 但收到以下错误:无法创建类型为"任务管理器.模型.任务"的常量值。在此上下文中仅支持基元类型("Int32、字符串和 Guid")。

将此 SQL 语句转换为 LINQ

只是在我的头顶上做这件事,但也许这个?

var subQuery = from t in Tasks
               where t.TaskType == "MeterReading"
               select t.MeterReadingOrderERPRouteCreateResponseID
var query = from m in MeterReadingOrderERPRouteCreateResponses
            where !subQuery.Contains(m.ID)
            select new
            {
                ID = m.ID,
                UniqueID = m.UniqueID,
                RouteHeaderID = m.RouteHeaderID,
                RouteObjectState = m.RouteObjectState,
                OriginalRouteUniqueID = m.OriginalRouteUniqueID
            };
var meterReadingTasks = from task in context.Tasks
                       where task.TaskType == "MeterReading"
                       select task.MeterReadingOrderERPRouteCreateResponseID;
var results = from m in context.MeterReadingOrderERPRouteCreateResponses
              where !meterReadingTasks.Contains(m.Id)
              select new { m.ID, m.UniqueID, m.RouteHeaderID, m.RouteObjectState, m.OriginalRouteUniqueID};