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 “肥皂”))。后来用户想通过代码过滤数据,所以我怎么可以代替上述表达式代替名称。 –

相关问题