如何在asp.net mvc中找到记录(没有id)

时间:2015-12-17 15:09:13

标签: asp.net-mvc database entity-framework

如何找到没有ID的记录?

这不起作用

Wallet wallet = db.Wallet.Where(n => n.Name == My.Name && n.UserId == userId);

这很好用

Wallet wallet = db.Wallet.Find();

1 个答案:

答案 0 :(得分:1)

Linq查询可以返回多个结果,当您仅为单个IEnumerable<Wallet>分配空间时,无法分配Wallet。如果您只想要一个结果,则应使用适当的方法缩小范围。

  • Single
      

    返回序列的唯一元素,如果序列中没有一个元素,则抛出异常。

  • SingleOrDefault
      

    返回序列的唯一元素,如果序列为空,则返回默认值;如果序列中有多个元素,则此方法抛出异常。

  • First
      

    返回序列的第一个元素。

  • FirstOrDefault
      

    返回序列的第一个元素,如果序列不包含元素,则返回默认值。

举个例子:

Wallet wallet = db.Wallet.Where(n => n.Name == My.Name && n.UserId == userId).Single();

始终将Linq查询的返回类型与您尝试将其分配的内容进行比较。 Visual Studio中的Intellisense将为您提供帮助。

请注意,这些方法都有重载,无需使用“Where”,您可以将过滤器lambda直接放入调用中,如:

Wallet wallet = db.Wallet.Single(n => n.Name == My.Name && n.UserId == userId);

您使用哪种风格取决于您,您认为哪种风格更具可读性。性能差异可能微不足道(尽管可能值得测试)。