LINQ的* OrDefault在MVC3 + ActiveRecord中抛出异常

时间:2012-06-06 20:25:40

标签: asp.net-mvc-3 castle-activerecord

this question的刺激下,我决定在我的MVC3 / ActiveRecord应用程序中尝试这个。

我已经有很多模型已经运行,而且有些视图可以处理这些模型。这里没什么特别的。我的一个模型叫做AppSession

基于上述问题,我希望这可行:AppSession.FirstOrDefault(a => ...) ?? null

它不起作用。我仍然得到InvalidOperationExceptionFirstOrDefaultSingleOrDefault都是如此。我最终将我的电话打包在try/catch以绕过它。

我在这里做错了什么?

编辑:根据要求,实际代码为:

void getAnAppSession() {
    AppSession sessions = project.AppSessions.FirstOrDefault(a => a.Ip == ip && a.MacAddress == macAddress && a.Platform == platform && a.Version == version && a.EndTime == null)
}

ipmacAddressplatformversion都是可验证为非null的方法变量。我的AppSessions架构(以及相应的班级属性)包括:

  • ID(int,not null)
  • StartDate(DateTime,not null)
  • EndDate(DateTime,null)
  • Ip(string,not null)
  • MacAddress(字符串,非空)
  • 平台(字符串,非空)
  • 版本(字符串,非空)

1 个答案:

答案 0 :(得分:1)

也许你的project.AppSessions本身是空的?这将导致FirstOrDefault()方法抛出错误。您可能希望在调用FirstOrDefault之前检查它是否为null,如果为null,则创建一个新的AppSession对象:

AppSession sessions = (project.AppSessions as AppSession ?? new AppSession())
    .FirstOrDefault(a => a.Ip == ip && 
                    a.MacAddress == macAddress && 
                    a.Platform == platform && 
                    a.Version == version && 
                    a.EndTime == null);