2012-10-09 93 views
1

编程新手,我打算从asp.net MVC中使用c#的表中获取一个单元格的值;在这里我试图:铸造会话变量 - ViewBag MVC4 - 铸造

DALEntities db = new DALEntities(); 
    var duration = db.MyTable.Where(c => c.Day == date && c.ID == id).Select(c => c.Duration); 
      Session["duration"] = duration; 

的数据得到我使用视图,控制器: 变种临时=会话[“持续时间”]; ViewBag.Duration = temp;

,并在视图:

@ViewBag.Duration 

我得到

System.Data.Objects.ObjectQuery`1[System.String] 

我会感激你的建议。

回答

3

你可以在最后调用.First()急切地执行查询,并得到一个结果符合这个标准:

var duration = db 
    .MyTable 
    .Where(c => c.Day == date && c.ID == id) 
    .Select(c => c.Duration) 
    .First(); 

不过要小心,因为如果没有记录符合.Where()子句,.First()延伸方法会抛出异常。在这种情况下,您可以考虑使用.FirstOrDefault()方法。

我也非常强烈建议你学习basic LINQ之前学习实体框架和学习ASP.NET MVC大多之前。否则,你会在ASP.NET MVC中挣扎很多。我还建议人们单独学习单独的框架,而不要混合它们。一旦你熟悉它们,你可以混合一个项目。

+0

如果有多个结果,“First”不会抛出异常; 'Single'会。 –

+0

@DStanley,如果有0个匹配的记录,'First'会抛出一个异常。如果有0个或多于1个匹配的记录,Single'将抛出异常。感谢您指出了这一点。我已经更新了我的答案,因为我错误地指出如果找到多条记录,'First'将会抛出异常。 –

+0

谢谢Darin,它工作。我将检查基本的LINQ。 – hncl