1

我有与动态 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'。任何人都可以帮我解决这个问题吗?

4

1 回答 1

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

编辑1:

var vDyna = a.UserProfileDetails.LstString.AsQueryable().Where("!Equals(@0)", a.FirstName).ToList();
于 2021-02-17T13:30:32.883 回答