LINQ查询的差异

时间:2012-10-04 16:06:36

标签: linq entity-framework

有人可以解释为什么,当一个查询应该只返回一个字符串项时,就像在下面的例子中一样;

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()

bvecause它返回此(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()

1 个答案:

答案 0 :(得分:2)

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

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

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

Dim deletedProdName As String = 
    ctx.products.SingleOrDefault(Function(c) c.Id = prodId).Name