2011-05-19 142 views
1

我對linq很陌生,我在LINQ中有效地編寫此查詢時遇到了一些困難。將此SQL語句轉換爲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)。

回答

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

嗨巴拉河試過了,它的作品完美。感謝你及時的答覆 – 2011-05-20 06:45:59

3

只是這樣做了我的頭頂,但也許這?

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