1
엔티티의 속성을 가리키는 표현식을 사용하는 확장 메소드를 만들고, 문자열이 있는지를 먼저 확인하는 String.Contains
을 사용하여 이것을 비교하는 상수 문자열을 만들려고합니다. null 또는 공백을 반환하고 문자열에 값이있는 경우에만 필터를 적용합니다. 이것은 표현식 트리의 첫 번째 실수입니다. 그래서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 이제 저는 치료 방법을 모르겠다는 예외가 있습니다.엔티티에 Linq의 표현 트리
나는 지금까지 :
<System.Runtime.CompilerServices.Extension()>
Public Function CheckAndFilter(Of T)(source As System.Linq.IQueryable(Of T), expressionField As System.Linq.Expressions.Expression(Of System.Func(Of T, String)), compareTo As String) As IQueryable(Of T)
If String.IsNullOrEmpty(compareTo) Then
Return source
Else
Dim memberExp As Expressions.MemberExpression = DirectCast(expressionField.Body, Expressions.MemberExpression)
Dim param = Expressions.Expression.Parameter(GetType(T))
Dim method As Reflection.MethodInfo = GetType(String).GetMethod("Contains")
Dim compareToExpression = Expressions.Expression.Constant(compareTo)
Dim finalExpr = Expressions.Expression.Call(memberExp, method, compareToExpression)
Dim lambda = Expressions.Expression.Lambda(Of Func(Of T, Boolean))(finalExpr, param)
Return source.Where(lambda)
End If
End Function
나는 내가 FirstName
문자열 속성을 가진 Customer
실체 가지고 DbContext
에, 이런 식으로 전화 해요 :
Dim results = repository.Customers.CheckAndFilter(Function(c) c.FirstName, searchText)
그리고 예외입니다 :
{"The parameter 'c' was not bound in the specified LINQ to Entities query expression."}
의견이 있으십니까?