2011-03-10 78 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