1
Dim itemList  

    itemList = From items In Context.Product 
       Select New With {Key .Code = items.ITEM_CODE_, Key .Name = items.ITEM_NAME, Key .Eancode = items.EANCODE}  

    Dim sortList = itemList.Where(Function(u) u.Name.Contains("soap")) 

當我執行的最後一行時我正在一個錯誤:如何在Entity Framework中聲明選擇實體數據類型?

"Method invocation failed because 'Public Function Where(predicate As String, ParamArray parameters As System.Data.Objects.ObjectParameter()) As System.Data.Objects.ObjectQuery`1[[VB$AnonymousType_2(Of VB$AnonymousType_2(Of Integer,String,String))' cannot be called with these arguments:" & vbCrLf & " Argument matching parameter 'predicate' cannot convert from 'VB$AnonymousDelegate_0(Of Object,Object)' to 'String'."

其實我想的itemList實體傳遞到另一個方法,並在方法我想使用過濾器/動態排序選項。

像下面

Dim itemList 

    itemList = From items In Context.Product 
       Select New With {Key .Code = items.ITEM_CODE_, Key .Name = items.ITEM_NAME, Key .Eancode = items.EANCODE}   
    Call LoadData(itemList) 

Sub LoadData(itemList as Object) 
    Dim sortList = itemList.Where(Function(u) u.Name.Contains("soap")) 
End Sub 

請分享我你的建議如何可以解決?

回答

2

只需創建具有屬性CodeNameEancode一個新的類。

Public Class ProductRow 
    Public Property Name As String 
    Public Property Code As String 
    Public Property Eancode As String  
End Class 

,而不是使用匿名類型,並使用此類型:

Dim itemList 
itemList = From items In Context.Product 
      Select New ProductRow With {Key .Code = items.ITEM_CODE_, Key .Name = items.ITEM_NAME, Key .Eancode = items.EANCODE}   
Call LoadData(itemList) 

然後你可以將它傳遞給另一個函數:

Sub LoadData(itemList as IQueryable(Of ProductRow)) 
    Dim sortList = itemList.Where(Function(u) u.Name.Contains("soap")) 
End Sub 

編輯: 如果你只在運行時才知道列名,那麼你需要像dynamic LINQ library這樣的東西。在這種情況下,您可以使用IQueryable(Of Product)

Sub LoadData(itemList as IQueryable(Of Product)) 
    Dim sortList = itemList.Where("ColumnXY LIKE '%soap%'"); 
End Sub 
+0

非常感謝@Marc。但我想過濾像下面的動態列[Dim sortList = itemList.Where(Function(u)u.Name.Contains(「soap」)) Dim sortList = itemList.Where(Function(u)u.Code.Contains (10))]這是可能的動態過濾器? –

+0

你是什麼意思的「動態過濾器」。你有一個例子嗎?因爲u.Name.Contains(「soap」)或u.Code.Contains(10)已經是可能的了。 – Marc

+0

假設我將按名稱進行過濾,如Dim sortList = itemList.Where(Function(u)u.Name.Contains 「肥皂」))。後來用戶想通過代碼過濾數據,所以我怎麼可以代替上述表達式代替名稱。 –