2013-05-30 92 views
0

嗨,我有兩個表tabl1和table2。我試圖搜索每個表的某個日期,一旦我得到列表c1和c2然後我需要得到兩個聯合,所以我有一個不重複的行使用實體框架的清單。兩個IEnumerable和IQueryable列表的聯合

ssEntities sss = new ssEntities(); 
    var c1 = sss.table1.ToList().Where(x => x.date >= DateTime.Today); 
    var c2=sss.table2.ToList().Where(x=>x.date1 DateTime.Today); 
    var ll=c1.Union(c2).ToList(); 

當我試圖把兩個列表的結合中,我得到以下

Instance argument: cannot convert from 
'System.Collections.Generic.IEnumerable<testproject.table1>' to 'System.Linq.IQueryable<testproject.table2>' 

請幫忙給定的錯誤。

+0

'table1'和'table2'是不同的類型嗎?如果是這樣,你不能聯合兩個不同類型的'IEnumerable'。相反,'ll'必須包含'table1'類型的對象,'table2'類型或您選擇的其他類型的對象。 –

+0

將它投影到匿名類中,或者放到兩個邊的共同類中 –

+0

爲什麼要立即在table1和table2上調用ToList()?在按日期過濾之前,將表格的全部內容放入內存中。你可以讓數據庫服務器爲你過濾。 – TylerOhlsen

回答

3

這是很容易

ssEntities sss = new ssEntities(); 
    var c1 = sss.table1.ToList().Where(x => x.date >= DateTime.Today) 
          .Select(x => new { x.Prop1, x.Prop2 }); 
    var c2 = sss.table2.ToList().Where(x => x.date1 >= DateTime.Today) 
          .Select(x => new { x.Prop1, x.Prop2 }); 
    var ll = c1.Union(c2).ToList(); 

你必須只選擇每個表所需的屬性,它們必須是相同的,因此,工會會的工作,你不能做一個聯盟上2種不同的類型。