【问题标题】:Convert this SQL Statement to LINQ将此 SQL 语句转换为 LINQ
【发布时间】:2011-05-19 21:22:02
【问题描述】:

我对 linq 很陌生,在 LINQ 中高效地编写此查询时遇到了一些困难。

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

有什么帮助吗?我已经尝试过以下解决方案:How would you do a "not in" query with LINQ?,但出现以下错误:无法创建类型为“TaskManager.Models.Task”的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。

【问题讨论】:

    标签: c# sql linq linq-to-sql


    【解决方案1】:

    只是在我的脑海中做这件事,但也许是这个?

    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
                };
    

    【讨论】:

      【解决方案2】:
      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};
      

      【讨论】:

      • 嗨 Bala R. 试过了,效果很好。感谢您的快速回答
      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 2011-01-24
      • 2013-02-15
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多