Как передать свойство объекта как параметр выражения LINQ?Как передать свойство объекта как параметр выражения LINQ?
public DropdownFilter(WhatTypeHere? ABC)
{
// I want to store a selected property here
// ABC must be a property of TEntity
this.ABC = ABC;
}
// I want the class to encapsulate a LINQ query and just parametrize it with a property
public override IQueryable<TEntity> Filter(IQueryable<TEntity> filteredEntityCollection, string value)
{
// ABC is a property of TEntity
return filteredEntityCollection.Where(this.ABC == value);
}
Я буду использовать его как это:
new DropdownFilter<Invoice>(invoice => invoice.SomeProperty);
Я уже пробовал с Expression<Func<TEntity, string>>
типа параметра, но это не сработало. Жалоба около
The LINQ expression node type 'Invoke' is not supported in LINQ to Entities.
Это потрясающе, и я уверен, что это сработает, но я не могу использовать его, прежде чем я выясню, как распространять «TProperty» вверх ... так как все мои «фильтры» наследуются от базового класса, который используется как свойство списка другого объекта ... –
@HristoYankov хорошо, вы можете удалить TProperty и либо использовать 'string', как вы хотели раньше (но вы должны проверить' propertyInfo.PropertyType' как строку), или вы можете использовать 'object' в качестве значения и преобразовать его в тип свойства с помощью выражения Expression.Convert (Expression.Constant (value), propertyType)' –