2011-03-10 46 views
2

假設我們有兩個表是這樣的:LINQ加入問題

table1的

| date | data1 | 
| 3/2/2011 | xyz | 
| 3/4/2011 | abc | 

表2

| date | data2 | data3 | 
| 3/2/2011 | def | ghi | 
| 3/9/2011 | jkl | mno | 

我們如何書寫一個連接來獲得

| date | data1 | data2 | data3 |

比方說,我們必須爲MyModel這樣定義:

MyModel{ 
    public DateTime TheDate {get;set;} 
    public int Data1 {get;set;} 
    public int Data2 {get;set;} 
    public int Data3 {get;set;} 
} 

我知道我們必須使用DefaultIfEmpty,但我不知道如何合併兩個時,有沒有像對應的日線在這兩個第2行表。

感謝您的任何想法。

回答

3
var results = from t1 in table1 
       let t2 = (from t in table2 select t) 
       where t1.date == t2.date 
       select new MyModel { 
       TheDate = t1.date == null ? t2.date : t1.date, 
       Data1 = t1.data1, 
       Data2 = t2.data2, 
       Data3 = t2.data3 
       }; 
+0

在語句裏t1.date == t2.date,t2。日期不會出現在智能感知中。 – frenchie 2011-03-10 22:21:04

+0

我只是用一個from來代替let語句,它似乎工作;至少沒有語法錯誤。 – frenchie 2011-03-10 22:25:23

+0

好的,這個工程;謝謝! – frenchie 2011-03-11 00:23:52