将FirstOrDefault添加到我的查询中?

时间:2016-11-06 19:06:02

标签: c# asp.net entity-framework linq

如何向控制器添加第一个或默认值:

public ActionResult Index(string searchString)
{
    var customers = from s in db.TicketDetails
                    select s;

    if (!String.IsNullOrEmpty(searchString))
    {
        //search criteria
        customers = customers.Where(s => s.SupportRef.Contains(searchString));
    }
    return View(db.TicketDetails.ToList());
}

我需要确保我的结果只返回1条记录。如果他们返回null,那么我需要传入虚拟值。

1 个答案:

答案 0 :(得分:2)

确保从查询中返回了多少项。

  • 如果超过2,则返回默认值。
  • 如果nun返回默认值。
  • 如果返回的项为null,则返回默认值。
  • 否则,您的收藏中会有一个有效的商品,并且您将其退回:

所有这些你可以这样写:

public ActionResult Index(string searchString)
{
    var defaultReturnValue = //you default dummy object

    if(String.IsNullOrEmpty(searchString))
        return View(defaultReturnValue);

    var customers = (from s in db.TicketDetails
                     where s.SupportRef.Contains(searchingString)
                     select s).Take(2).ToList(); // execute query here so not to execute it twice

    return View(customers.Count > 1 ? defaultReturnValue :
                                      customers.FirstOrDefault() ?? defaultReturnValue);
}

我已经添加了Take(2),因此生成的查询最多会占用2条记录,因此,如果有多条记录,它仍然不会带来所有记录