2

有人可以解释为什么,当查询应该只返回一个字符串项时,如下例所示;

From c in context.Products Where c.Id=prodId Select c.Name

为什么不能这样做呢?

Dim prodDeleted as String = (From c in context.Products Where c.Id=prodId Select c.Name).ToString()

因为它返回 this (System.Data.Objects.ObjectQuery`1[System.String]) ,而不是产品名称

而不是必须这样做;

 Dim prodDeleted = (From c In ctx.products
                               Where c.Id = prodId
                               Select c).FirstOrDefault()

 Dim deletedprodname As String = prodDeleted.Name.ToString()
4

1 回答 1

2

因为对 Select 的所有调用都返回一个 IEnumerable 而不是单个元素。

要验证您的查询是否确实返回单个元素,您需要添加对 Single 的调用。或者,如果您不关心返回的是单个元素还是多个元素,您可以使用 First 获取第一个元素。

如果您不反对使用 VB.NET 等效的 lambda 语法,则可以简化所有内容:

Dim deletedProdName As String = 
    ctx.products.SingleOrDefault(Function(c) c.Id = prodId).Name
于 2012-10-04T16:08:46.013 回答