2013-11-04 95 views
0

我想查询我的数据库从我的数据库中获取特定的数据。但是,当我将查询转换为字符串时,它不返回选择值,而是返回一个字符串中的整个SQL查询。我难倒,为什么这种情况正在发生Asp.net MVC 4数据库查询返回的sql查询。

public ActionResult StudiedModules() 
    { 
     Model1 studiedModules = new Model1(); 
     List<StudiedModulesModel> listModules = new List<StudiedModulesModel>(); 
      using (EntityOne context = new EnitityOne()) 
      { 
       foreach(var module in context.StudiedModules){ 
        studiedModules.School = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.School).ToString(); 
        studiedModules.Subject = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.Subject).ToString(); 
       } 
      } 

      var data = listModules; 

     return View(data); 
    } 

回答

1

上的实体框架Linq查询一样,实际上将返回SQL查询调用ToString()。所以写完之后,你的代码就完成了你写的任务。

如果您想从IQueryable<T>中选择第一个结果,那么您需要在ToString()之前拨打First()。因此,尝试改变

studiedModules.School = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.School).ToString(); 

studiedModules.Subject = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.Subject).ToString() 

studiedModules.School = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.School).First().ToString(); 

studiedModules.Subject = context.ModuleDatas.Where(p=>p.ModuleCode == module.ModuleCode).Select(u=>u.Subject).First().ToString() 

有这取决于你想完成什么提供了一大堆更多的方法。如果你想得到一个列表,使用ToList(),或者UrošGoljat指出,你可以使用Aggregate((a, b)=> a + ", " + b)方法得到一个用逗号分隔的值列表。

+0

感谢您的帮助,我已经使用第一() - 这给出了一个错误“序列不包含任何元素”。所以我使用FirstOrDefault(),它似乎并没有得到我需要的正确值,它似乎始终为数据库中的所有行获取第一项。 – user1938460

+0

忽略,这是我的列表串联错误! – user1938460

+0

“序列不包含元素”是当First()抛出的查询没有结果时抛出的异常。 First()和FirstOrDefault()之间的区别在于,如果查询没有结果,First()会抛出异常,FirstOrDefault()将返回null。 –

0

如何使用集合((a,b)=> a +“,”+ b)而不是ToString()。

问候, 乌罗什