Динамическое условие Где в EF Core 2.2 - PullRequest
0 голосов
/ 22 марта 2019

Я хочу динамически добавить предложение where в мой запрос LINQ.У меня есть имя свойства фильтра и значение свойства фильтра, поэтому мне нужно построить что-то вроде этого:

var assignmentListQuery = context.Assignments;

if (!string.IsNullOrWhiteSpace(bookingStep.FilterPropertyName) && !string.IsNullOrWhiteSpace(bookingStep.FilterPropertyValue))
{
    assignmentListQuery = assignmentListQuery.Where(item => PROPERTYNAME == PROPERTYVALUE)
}

ar assignmentList = await assignmentListQuery.ToListAsync();

Я попытался получить propertyinfo свойства, что, как мне кажется, здесь не так.

var item = context.Set<Assignment>().First();
object value = item.GetType().GetProperty(bookingStep.FilterPropertyName).GetValue(item, null);

Кто-нибудь знает, как создать этот тип предложения where?

public class Assignment
    {
        /// <summary>
        /// 
        /// </summary>
        [Display(Name = nameof(Id))]
        public int Id { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = nameof(OrderNumber))]
        public string OrderNumber { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = nameof(ScheduledLoading))]
        public DateTime ScheduledLoading { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = nameof(CustomerOrderNumber))]
        public string CustomerOrderNumber { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = nameof(ArticleNumber))]
        public string ArticleNumber { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [Display(Name = nameof(Comment))]
        public string Comment { get; set; }

        [Display(Name = nameof(CustomerId))]
        public int? CustomerId { get; set; }
        [Display(Name = nameof(Customer))]
        public virtual Customer Customer { get; set; }
}

Это объект Assignment, FilterPropertyName, например, "CustomerOrderNumber"

1 Ответ

3 голосов
/ 22 марта 2019

Спасибо всем. Я получил его с помощью

List<Assignment> assignmentList;
                    if (!string.IsNullOrWhiteSpace(bookingStep.FilterPropertyName) &&
                        !string.IsNullOrWhiteSpace(bookingStep.FilterPropertyValue))
                    {
                        assignmentList = await
                            assignmentListQuery.Where(e =>
                                EF.Property<string>(e, bookingStep.FilterPropertyName) ==
                                bookingStep.FilterPropertyValue).ToListAsync();
                    }
                    else
                    {
                        assignmentList = await assignmentListQuery.ToListAsync();
                    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...