2011-05-19 17 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

こんにちはバラR.それを試して、それは完全に動作します。素早い答えをありがとう –

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 
      }; 
関連する問題