FirstOrDefault提供错误的错误结果

时间:2014-07-24 16:33:01

标签: asp.net asp.net-mvc linq asp.net-mvc-4

我对如何解决这个问题感到困惑。

如果 custID = 0

,我想显示“找不到客户”
@if (Model.Customer == null)
{
    <p>no customer found</p>
}
else
{
<p> @Model.Customer.CustomerName </p>        
}

控制器:

  public ActionResult Index(int custID = 0)  
        {
         var customer = (from c in db.Customers
         where c.Id == (custID == 0 ? c.Id : custID)
         select c).FirstOrDefault();    // .SingleOrDefault(); 

        routes.MapRoute(
                  null,
                  "AAA/Index/{custID}",
                  new { controller = "AAA", action = "Index" }, new { custID = @"\d+" });

转到URL“/ AAA / Index / 0”会在表中给出记录号ID = 1 ,而对于ID为0的记录则不为null。

我使用了SingleOrDefault,它出错:

  

序列包含多个元素

如果找不到'custID = 0'的记录,FirstOrDefault()怎么没有给我默认的 null 值?

1 个答案:

答案 0 :(得分:4)

custID == 0你的情况如下:

where c.Id == c.Id

对任何记录来说都是如此。 SingleOrDefault失败,因为有多个FirstOrDefault返回第一个。

可能你只想:

where c.Id == custID

或者如果您的数据库包含Id等于0的记录,但您不想将其返回:

where custID != 0 && c.Id == custID