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

Просто создайте новый класс со свойствами Code, Name и Eancode.

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 

Edit: Если вы знаете имя столбца только во время выполнения, тогда вам нужно что-то вроде 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 (Функция (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 ("мыло")). Позже пользователь хочет отфильтровать данные по коду, так как я могу заменить код в этом выражении вместо имени. –

 Смежные вопросы

  • Нет связанных вопросов^_^