2016-04-04 59 views
1

我有幾個具有相同結果結構的通用查詢,我試圖將它們結合到一個變量中,以便我可以將它們傳遞給視圖。mvc c#結合了兩個以上的查詢結果

var query1 = db1.table.Where(a => a.ID == filter1).Select(x=> new ViewModel { //columns}).LastOrDefault(); 
var query2 = db1.table.Where(a => a.ID == filter2).Select(x=> new ViewModel { //columns}).LastOrDefault(); 
var query3 = db1.table.Where(a => a.ID == filter3).Select(x=> new ViewModel { //columns}).LastOrDefault(); 

var combi = query1.Concat(query2); 

我不能結合這兩個查詢結果,我試過使用Concat或Union,但它給出了下面的錯誤。

「視圖模型」不包含關於「的毗連」和沒有擴展方法「的毗連」接受類型「視圖模型」的第一個參數的定義可以找到(是否缺少using指令或程序集引用?)

謝謝!

+0

如果你第一次使用DB,更好,而不是使用這個存儲過程。 – dan

+0

謝謝,但我先使用代碼。 – makoto

回答

3

如果你是用實際類型來代替var關鍵字,你會看到你有這樣的:

ViewModel query1 = db1.table.Where(a => a.ID == filter1).Select(x => new ViewModel { /* columns */ }).LastOrDefault(); 
ViewModel query2 = db1.table.Where(a => a.ID == filter2).Select(x=> new ViewModel { /* columns */ }).LastOrDefault(); 
ViewModel query3 = db1.table.Where(a => a.ID == filter3).Select(x=> new ViewModel { /* columns */ }).LastOrDefault(); 

爲了做一個.Concat(...)應該IQueryable<ViewModel>IEnumerable<ViewModel>

這是.LastOrDefault()調用,這會導致你的悲傷。

試試這個:

IQueryable<ViewModel> query1 = db1.table.Where(a => a.ID == filter1).Select(x => new ViewModel { /* columns */ }); 
IQueryable<ViewModel> query2 = db1.table.Where(a => a.ID == filter2).Select(x=> new ViewModel { /* columns */ }); 
IQueryable<ViewModel> query3 = db1.table.Where(a => a.ID == filter3).Select(x=> new ViewModel { /* columns */ }); 

var combi = query1.Concat(query2).Concat(query3).LastOrDefault(); 
+0

將變量'combi'上的'LastOrDefault()'工作如何在單個查詢上工作? – makoto

+0

@makoto - 是的,它應該這樣做。 – Enigmativity