2009-05-26 13 views
0

私は2つの無関係な(FKの定義されていない)テーブルを持っています。最初の表には、ユーザーがアクセスできないタスクが含まれています。私はこれらのすべてのタスクを見つける必要があります - この場合、結合されたテーブルにはnullが含まれます。どうすれば入手できますか?ここでLinq to Entities:結合で見つからないアイテムを取得するための左の結合

はセットアップです:

TimeData table 
- userID 
- taskID 
- hours 


ApprovedTasks table (the one that should contain nulls) 
- taskID 
- userID 

SQLクエリは次のようになります。エンティティのクエリにLINQを使用してそれをやってのける

select * from TimeData td 
left join ApprovedTasks at 
on at.taskID = td.taskID and at.userID = td.userID 
where at.taskID is null 

任意の方法?

TIA

+0

実際には、「結合」は実装の詳細です。 Contains/Any/Exceptを使ってそれを別々の組合として見るべきではないかと思います。私はそれをテストするための便利なデータベースを持っていません... –

+0

質問に追加された行は確かに役立ちます! – CSharpAtl

答えて

3

チェックアウト... Disjoint Union in LINQ

これは動作するはずです...

var approvedTaks = from at in ApprovedTasks.Except(
             from at2 in ApprovedTasks 
             where at2.userID == userId and at2.taskID==taskId 
             select at2) 
        where at.userID == userId and at.taskID==taskId 
        select at; 

が、申し訳ありませんが、それをテストするための便利なデータベースを持っていません。

+0

Davidさん、ありがとう、私はこれを打つつもりです。しかし一見、私はエンティティのフレームワークが "例外"を実装していないと賭けている...我々はすぐに参照してください。 – bugfixr

+0

ああ...しかし、あなたはまだ2つのリストを取得し、それらの上にlinqを実行しているListや他の構造を使ってExceptを実行することができます。 Linq to Entitiesを使用しているだけであれば、常にそれを使用しなければならないわけではありません。私は彼らが関連するANYを実装していると思っています。 –

+0

2つのリストをやって、Exceptをやってしまうのではないでしょうか?それはあなたがdbサーバからデータを引き出し、.netを使って作業をしていることを意味します。私はそれを最適化するために、dbサーバにすべての負荷をかけたいと思うでしょう。 – bugfixr

関連する問題