2013-01-19 50 views
4

我正在寫一個查詢,返回需要來自兩個表的數據的模型列表,我希望let關鍵字可以幫助我。我開始是這樣的:在linq中使用let關鍵字來組合查詢

var TheListOfModels = 
       let Data1 = (from a in MyDC.Table1 
           where .... 
           select new ObjectThatContainsData1() 
           { 

           }).ToList() 

       let Data2 = (from b in MyDC.Table2 
           where .... 
           select new ObjectThatContainsData2() 
           { 

           }).Tolist()     

       select new ObjectThatContainsBothData() 
       { 
        SomeProp1 = from p in Data1 
           select everything 

        SomeProp2 = from a in Data2 
           select everything 

       }).ToList() 

我不是如何進行和寫入最終select語句從2項let條款的結果,而不是直接從表中選擇太肯定。我正在寫一個很好的起點的查詢結構,還是應該以另一種方式寫它?

謝謝。根據註釋

編輯:定義表

表1看起來有點像這樣:

​​

表2的樣子說:

AppleID | UserID | HarvestDateTime | SomeOtherColumn 

我在尋找提取所有桃子和蘋果到ObjectThatContainsBothData的列表中,並且where子句基本上存在以過濾HarvestDateTimeUserID

+1

這似乎是一個連接,在這裏是適當的。也許接下來是某種集合操作。你能提供表格定義嗎? – ChaosPandion

+0

@ChaosPandion:我做了編輯。我也想過使用一個連接,但是我沒有找到任何連接。 – frenchie

+0

您是否需要通過UserID或HarvestDateTime對輸出進行分組?我想你也可以減少到一個單一的對象,但你的例子告訴我你正在尋找按某種東西來分組輸出。 – ChaosPandion

回答

3

看起來你試圖將Linq查詢語法應用於序數C#代碼。只需創建您的對象並執行兩個查詢即可從兩個屬性中獲取數據:

var result = new ObjectThatContainsBothData() 
      { 
       SomeProp1 = db.Peaches.Where(...).Select(...).ToList(), 
       SomeProp2 = db.Apples.Where(...).Select(...).ToList() 
      }; 
+1

啊酷!因爲這避免了let子句或from子句,所以更清潔。感謝你的回答! – frenchie

+0

老實說,這是我的想法,但對@frenchie的意圖只是有一絲懷疑。 – ChaosPandion