2014-10-18 38 views
0

我的ViewModel和我做MVC4附加到现有类对象

var model = from x in abc 
      select new CompaniesVM { id = x.id ..etc} 

那么我想执行另一个查询并追加数据CompaniesVM实例。像

var model2 = from f in def 
      select new CompaniesVM {id = f.id ..etc} 

然后将模型返回到视图。我不能用新的关键字,因为这将创建新的对象实例

我尝试在呼叫var companyList = new CompaniesVM();的开始创建一个新的实例,然后代替select new CompaniesVMselect companyList {companyList.id = x.id},但它给了我一个编译错误,没有找到X。编号

我该如何解决?

UPDATE

我需要执行,则第一个条件检查是否计数()< 5然后执行第二条件和结果附加到一个视图模型。不能在一次通话中。

+0

SELECT查询返回CompaniesVM'的'集合添加第二个查询到的第一个结果。如果要合并它们,请使用'.concat' [如何:连接两个序列(LINQ to SQL)](http://msdn.microsoft.com/zh-cn/library/vstudio/bb386979(v = vs。 100).aspx) – 2014-10-18 23:13:30

+0

如果你不想做一个concat,为什么不创建一个视图是两个表的联合,然后你只需要一个调用来填充你的模型 - 不需要concat。 – Gjohn 2014-10-19 00:17:47

+0

@StephenMuecke viewmodel包含两个表的联合。第一个select从一个数据库获取记录,然后我检查count()<5是否执行第二个语句并想追加到同一个对象。使用.concat似乎我必须把所有在一个查询。如果需要,我该如何进行单独的查询和组合。谢谢 – Ben 2014-10-19 21:10:19

回答

0

可以使用.concat

var model = from x in abc select new CompaniesVM { id = x.id ..etc} 
if (model.Count() < 5) 
{ 
    model = model.ToList().concat(from f in def select new CompaniesVM {id = f.id ..etc}) 
} 
+0

后concat我做model.ToList()和我得到一个异常:无法创建一个'ViewModels.CompaniesVM'类型的常量值。只有原始类型或枚举类型在此上下文中受支持。这是什么意思?谢谢。 – Ben 2014-10-19 23:30:51

+0

我添加了'AsEnumerable()'到第一个查询,它工作。你知道为什么我必须添加它吗?它能做什么? – Ben 2014-10-19 23:35:58

+0

我只是想纠正我的答案:)(你也可以使用'.ToList()')。它的原因在于'model'在内存中,您不能使用内存中的另一组数据来加入数据库中的一组数据。 – 2014-10-19 23:38:35

0

简单的方法是创建一个视图模型,它包含两个表的联合并在一次调用中获取数据。