2010-02-23 71 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