2012-10-04 80 views
2

有人可以解釋爲什麼,當一個查詢應該返回一個字符串項目,只是在下面的例子中;LINQ查詢的差異

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

回答

2

因爲所有對Select的調用都返回一個IEnumerable而不是單個元素。

要驗證您的查詢是否真的返回單個元素,您需要將調用添加到Single。或者,如果您不在乎是否返回了單個元素或多個元素,則可以使用First獲取第一個元素或多個元素。

如果你不反對使用VB.NET相當於lambda語法,你可以簡化一切:

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

如果你不能100%肯定它會返回的任何元素,你可以使用[FirstOrDefault](http://msdn.microsoft.com/en-us/library/bb340482.aspx),驗證您的結果不爲空,如果沒有,請使用對象上的屬性。無法保證在任何實例中運行的任何查詢都會得到0,1個或更多結果,因此IEnumerable是最好的解決方案,因爲它允許任意數量的結果(包括無值)。 –

+0

謝謝你倆的確切答案 – dinotom