今天在写博客的页面集功能,根据URL去寻找Page,LINQ语句从SitePage的GetModelList()集合中获取符合条件的page,如果查询不到则跳转到404页面。代码是这样的:

var page = (from p in optSitePage.GetModelList()
            where p.VirtualUrlPath.ToLower() == requestTitle.ToLower()
            select p).First();

if (null == page)
{
    context.Response.Redirect("/404.html");
    return;
}

我故意传了个不存在的URL,结果linq语句直接报错:System.InvalidOperationException: Sequence contains no elements。查了下MSDN发现用了First()的话,如果结果集中没有元素,它是不会返回null的。改成FirstOrDefault()就好了。

var page = (from p in optSitePage.GetModelList()
            where p.VirtualUrlPath.ToLower() == requestTitle.ToLower()
            select p).FirstOrDefault();