Динамическая фильтрация Linq с родительским свойством не работает

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

          public class UserProfile 
    {
      
        public string FirstName { get; set; }

        public string LastName { get; set; }

        public int Age { get; set; }

        public long Overtime { get; set; }

        public UserProfileDetails UserProfileDetails { get; set; }
    }

    public class UserProfileDetails 
    {
        public UserProfileDetails()
        {
            LstString = new List<string>();
        }
       
        public string Department { get; set; }

        public double Salary { get; set; }

        public int LeaveBalance { get; set; }
        public List<string> LstString { get; set; }
    }

Создал объект UserProfile, как показано ниже.

          var a = new UserProfile();

Для обычного Linq я могу выполнить следующее. Я пытаюсь найти все строки в UserProfileDetails, хотя мое имя не совпадает с моим.

          var vvv = a.UserProfileDetails.LstString.Where(x => !x.Equals(a.FirstName)).ToList();

Я хочу преобразовать указанный выше linq в динамический linq и использовал следующие

           var vDyna = a.UserProfileDetails.LstString.AsQueryable().Where("!Equals(FirstName)").ToList();

Но приведенное выше дает ошибку: System.Linq.Dynamic.Core.Exceptions.ParseException: «В типе« String »нет свойства или поля« FirstName ». Кто-нибудь может мне помочь с этим, пожалуйста?

1 ответ

Думаю, это похоже на функцию LINQ. В строке where вы должны использовать переменную UserProfile a. Ваш код:

      var vDyna = a.UserProfileDetails.LstString.AsQueryable().Where("!Equals(FirstName)").ToList();

Мое предложение:

      var vDyna = a.UserProfileDetails.LstString.AsQueryable().Where(s => !s.Equals(a.FirstName)).ToList();

Я никогда не использовал Dynamic Linq, но, возможно, это помогает.

Источник: https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.where?view=net-5.0

Другие вопросы по тегам