2012-02-26 16 views
0

私はこのようなクエリを書いている:LINQからSQLへの条件付きの読み取り

var TheOutput = (from x in MyDC.MyTable 
       where..... 
       select new MyModel() 
       { 
        MyPropID = (from a in MyDC.MyOtherTable 
           where.... 
           select a.ElementID).SingleOrDefault(), 

        MyPropData = (from a in MyDC.MyOtherTable 
            where a.ElementID == MyPropID 
            select a.ElementData).SingleOrDefault(), 
       } 

私は、データベースからいくつかのプロパティをmymodelというをいっぱいにしています。これらのプロパティのうちの2つは、別のテーブルを読み込むことで埋められます。現時点では、最初にMyPropIDを読んで、別のテーブルに要素があるかどうかを確認し、IDが取得されたかどうかにかかわらず、もう一方のテーブルを再度読み取ってデータを取得します。

MyPropIDを読み込んでヌルを返して、どこにa.ElementID == MyPropID節に一致するデータがないことが分かっている場合、この2番目の読み込みを削除するにはどうすればよいですか。

ありがとうございました。

答えて

1
var TheOutput = (from x in MyDC.MyTable 
       where..... 
       let id = (from a in MyDC.MyOtherTable 
           where.... 
           select a.ElementID).SingleOrDefault() 
       select new MyModel() 
       { 
        MyPropID = id, 
        MyPropData = (from a in MyDC.MyOtherTable 
            where id != null && a.ElementID == id 
            select a.ElementData).SingleOrDefault() 
       } 

あなたのコードがこのクエリから単一のSQL文を作成する場合は、nullをチェックすることは重要ではないと思います。このクエリによって複数のSQL文が生成される場合は、

+0

私のコードで生成されるSQL文の数はどこで確認できますか? – frenchie

+0

私は通常[LinqPad](http://www.linqpad.net/)を使用します – Magnus

+1

おそらく 'MyPropData = id == null? null:(MyDC.MyOtherTableの...から)Single()は、クエリがまったく実行されないという意図を明確にします。 – BACON