返回单个对象而不是IEnumerable

时间:2014-03-04 19:05:24

标签: vb.net entity-framework

请参阅下面的代码行:

Dim bookDetails = context.BookEntities.Where(Function(b) b.ISBN = ISBN)

bookDetails填充了IEnumerable(Of Book)。如何用一本书填充bookDetails,即ISBN是唯一的,所以总是返回一行。

3 个答案:

答案 0 :(得分:3)

Where方法过滤集合并生成过滤集合。其他方法过滤集合并生成单个匹配结果,例如:

  • 的SingleOrDefault
  • 第一
  • FirstOrDefault
  • 最后
  • LastOrDefault

对于OrDefault方法,它们将返回匹配的元素或该类型的默认实例(null用于引用类型)。如果找不到匹配项,其他方法将抛出异常。

例如,如果您希望实例与您的谓词匹配,并且如果没有匹配(或者如果有多个匹配项)则出错,请使用:

Dim bookDetails = context.BookEntities.Single(Function(b) b.ISBN = ISBN)

如果您想要null值而不是错误:

Dim bookDetails = context.BookEntities.SingleOrDefault(Function(b) b.ISBN = ISBN)

如果可以有多个,并且您想要第一个实例:

Dim bookDetails = context.BookEntities.First(Function(b) b.ISBN = ISBN)

等等......

答案 1 :(得分:1)

使用以下内容:

Dim bookDetails = context.BookEntities.Where(Function(b) b.ISBN = ISBN).SingleOrDefault ()

如果没有匹配,它将返回单个对象或NULL / default。不止一个会导致错误。如果您使用.Single(),那么如果有多个结果或没有结果,它将抛出错误。

答案 2 :(得分:1)

明确,只需要.Single(如果ISBN可能不存在,则为.SingleOrDefault)。

Dim bookDetails = context.BookEntities.Single(Function(b) b.ISBN = ISBN)