2016-04-04 56 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