이 질문에는 이미 답변이 있습니다.
다음 람다 식을 고려하십시오.
IQueryable<Product> query = query.Where(x => x.ProductName.Contains("P100"));
위 코드를 다음과 같이 변환해야합니다.
IQueryable<Product> query = query.Where(x => x.GetPropertyValue("ProductName").Contains("P100"));
여기에 더미 메소드가 추가되었습니다.GetPropertyValue("ProductName")
요구 사항을 설명합니다.
위의 코드에서 속성은 런타임에 해결되어야합니다. 다른 말로하면 스팅 값 Eg에서 속성에 액세스해야합니다."ProductName"
어떻게해야합니까?
var parameterExp = Expression.Parameter(typeof(Product), "type");
var propertyExp = Expression.Property(parameterExp, propertyName);
MethodInfo method = typeof(string).GetMethod("Contains", new[] { typeof(string) });
var someValue = Expression.Constant(propertyValue, typeof(string));
var containsMethodExp = Expression.Call(propertyExp, method, someValue);
Expression<Func<Product, bool>> predicate = Expression.Lambda<Func<T, bool>>
(containsMethodExp, parameterExp);
var query = query.Where(predicate);
where
포함 된 비트없이 호출? - Douglas Gaskell
이 확장 방법을 사용할 수 있습니다.
public static T GetPropertyValue<T>(this Product product, string propName)
{
return (T)typeof(Product).GetProperty(propName).GetValue(product, null);
}
그때:
IQueryable<Product> query = query.Where(x => x.GetPropertyValue<string>("ProductName").Contains("P100"));
이 방법은 Entity Framework에서 데이터베이스를 쿼리하는 데 사용할 수 없지만 엔티티 프레임 워크로 질문에 태그를 지정하지 않았으므로 사용하고 있다고 가정하지는 않습니다
GetPropertyValue()
방법Product
목적? 지원되지 않는 경우 전환을 수행 할 필요가 없습니다. - Jeff Mercado