2010-02-23 69 views
3

原始代碼:爲什麼我從C#到VB的轉換工作不成功?

public List<Contact> GetContactListEntityCompiledLINQ() 
{ 
    if (entities == null) entities = new CompanyEntities(); 

    ObjectQuery<Contact> contacts = compiledQuery.Invoke(entities); 
    if (NoTracking) contacts.MergeOption = MergeOption.NoTracking; 

    return contacts.ToList<Contact>(); 
} 

我的轉換代碼:

Public Function GetContactListEntityCompiledLINQ() As List(Of Contact) 

     If entities Is Nothing Then entities = New CompanyEntities() 

     Dim contacts As ObjectQuery(Of Contact) = compiledQuery.Invoke(entities) 
     If NoTracking Then contacts.MergeOption = MergeOption.NoTracking 

     Return contacts.ToList(Of Contact)() 

    End Function 

我獲得Visual Studio中的VB版本的錯誤:

錯誤1個擴展方法「公共功能ToList()由於System.Linq.Enumerable中定義的System.Collections.Generic.List(Of TSource)不是泛型的(或者沒有自由類型參數),所以不能有類型參數。

錯誤出現在Return語句中,Contact以藍色波浪標出。

任何想法?

+0

嘗試殺死最後'()'回油管路? – 2014-11-19 21:08:26

回答

6

它改成這樣:

Public Function GetContactListEntityCompiledLINQ() As List(Of Contact) 

    If entities Is Nothing Then entities = New CompanyEntities() 

    Dim contacts As ObjectQuery(Of Contact) = compiledQuery.Invoke(entities) 
    If NoTracking Then contacts.MergeOption = MergeOption.NoTracking 

    Return contacts.ToList() 

End Function 
+0

它應該返回通用版本,不是嗎?或者它不是真正的翻譯... – NibblyPig 2010-02-23 13:33:19

+0

它仍然會返回一個通用列表。類型參數是隱含的。 – SLaks 2010-02-23 13:38:36

+0

原始代碼應該工作儘可能我可以告訴,但我已發佈的將工作,並在IL級相同。 – 2010-02-23 13:40:30