2012-04-09 5 views
0

ここに私のSQLクエリは次のとおりです:
皆さんは私をもっときれいなものに変換するのを助けてくれますか?このSQLをLINQまたはLambda式に変換する方法は?

SELECT [PurchaseRequestID], [ProjectID],[FullName] 
FROM PurchaseRequest 
    WHERE [PurchaseRequestID] IN 
    (SELECT [PurchaseRequestID] FROM PurchaseRequestDetail) 
    AND [PurchaseRequestID] NOT IN 
     (SELECT [PurchaseRequestID] FROM [PurchaseOrder]) 

私はすでにsuccessfulyこれを変換しているが、私はこれが読めないと書き換える必要があると思う:

var query = from a in db.PurchaseRequests 
where 
    (from b in db.PurchaseRequestDetails 
    select new 
    { 
     b.PurchaseRequestID 
    }).Contains(new { a.PurchaseRequestID }) && 
!(from c in db.PurchaseOrders 
    select new 
    { 
     c.PurchaseRequestID 
    }).Contains(new { a.PurchaseRequestID }) 
select a; 

おかげ

+0

samantha07、あなたはこのサイトを初めて知っています。以下にいくつかの答えがあります。そのうちの1つがあなたの最善の答えだと思うなら、それを正しいものとしてマークして、他の人があなたのために働いたものを見ることができるようにしてください。 –

+0

すべての回答が機能します。あまりにも悪い私は1を選ぶことができます。ありがとう – samantha07

答えて

1
var query = from a in db.PurchaseRequests 
where 
    db.PurchaseRequestDetails.Any(x => x.PurchaseRequestID == a.PurchaseRequestID) && 
    !db.PurchaseOrders.Any(x => x.PurchaseRequestID == a.PurchaseRequestID) 
select a; 
+0

コメントしますか? – Magnus

2

あなたが本当にすべてのそれらの匿名のオブジェクトを必要としません。サブクエリに対して直接操作を行う代わりに、letキーワードを使用して一時変数を導入してください。

from a in db.PurchaseRequests 
let b = from b in db.PurchaseRequestDetails select b.PurchaseRequestID 
let c = from c in db.PurchaseOrders select c.PurchaseRequestID 
where b.Contains(a.PurchaseRequestID) && !c.contains(a.PurchaseRequestID) 
select a; 
+0

aは 'PurchaseRequests'型であり、bとcはそうでないので、それがどのように動作するか見てください。 (おそらくint) – Magnus

+0

okです。私はそれを 'a.PurchaseRequestID'と照合するように変更しました。今はうまくいくはずです。良いキャッチ。 –

0

あなたが設定ナビゲーションプロパティを持っている場合、あなたはこのようなクエリ書くことができます:あなたが好む場合

IQueryable<PurchaseRequest> query = 
    from purchaseRequest in myDataContext.PurchaseRequests 
    where purchaseRequest.PurchaseRequestDetail.Any() 
    where !purchaseRequest.PurchaseOrder.Any() 
    select purchaseRequest; 

またはこのラムダ/メソッドのスタイルを...

IQueryable<PurchaseRequest> query2 = myDataContext.PurchaseRequests 
    .Where(purchaseRequest => purchaseRequest.PurchaseRequestDetail.Any()) 
    .Where(purchaseRequest => !purchaseRequest.PurchaseOrder.Any()); 
関連する問題