按用户名过滤结果

时间:2015-02-14 17:09:13

标签: c# asp.net-mvc linq

我有这段代码:

// GET: Teachers/Edit/5
public ActionResult Edit(Guid? id)
{
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    string uname = User.Identity.GetUserId();
    Teachers teachers = db.teachers.Find(id);
    if (teachers == null)
    {
        return HttpNotFound();
    }
    ViewBag.GroupID = new SelectList(db.groups, "GroupID", "GroupName", teachers.GroupID);
    return View(teachers);
}

我试图按id(这是我的数据库密钥)过滤我返回的结果,但也是user name,它也存储在数据库中但不作为密钥。

我不确定语法,但我很确定找不到的方法。

1 个答案:

答案 0 :(得分:3)

您可以使用SingleOrDefault

db.teachers.SingleOrDefault(x => x.ID == id && x.UserName == username);

它返回序列的单个特定元素,如果找不到该元素,则返回默认值。如果结果中有多个元素,它将抛出异常。

此外 ,您也可以在这些地方使用Single()First()FirstOrDefault()。以下是它们之间的差异:

  • First() - 如果为空或未找到则抛​​出异常,如果重复则不抛出
  • FirstOrDefault() - 如果为空或未找到则返回默认值,如果重复则不返回
  • Single() - 如果为空或未找到则抛​​出异常,如果存在重复则抛出
  • SingleOrDefault() - 如果为空或未找到则返回默认值,如果存在重复则抛出

P.S: 您尚未说出您的专栏名称。所以,我刚刚猜到了他们的名字。您可以根据需要更改它们。