2012-02-26 22 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從數據庫中的幾個屬性。其中兩個屬性是通過閱讀另一個表填充的。目前,我首先閱讀MyPropID以查看其他表中是否有元素,然後再次讀取其他表以獲取數據,而不管是否檢索到ID。

如何通過讀取MyPropID並返回null知道我沒有數據與where a.ElementID == MyPropID子句匹配的情況下如何消除此第二次讀取。

謝謝。

回答

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 2012-02-26 16:17:09

+0

我通常使用[LinqPad](http://www.linqpad.net/) – Magnus 2012-02-26 17:06:49

+1

也許'MyPropData = id == null? null :(從MyDC.MyOtherTable中的a)。Single()'會使意圖更清楚,查詢可能根本不被執行? – BACON 2012-02-26 17:09:45