【问题标题】:Dynamic Linq Filtering with Parent Property not working父属性的动态 Linq 过滤不起作用
【发布时间】:2021-05-20 07:39:19
【问题描述】:

我有关于动态 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'。 谁能帮我解决这个问题?

【问题讨论】:

    标签: c# linq system.linq.dynamic


    【解决方案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();
    

    【讨论】:

    • 嘿它不是可枚举的转换为可查询并保持查询不变。我正在学习的图书馆是dynamic-linq.net
    • 哦好吧,我编辑了anweser,也许这有帮助
    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 2014-05-10
    • 1970-01-01
    • 2021-05-21
    • 2012-11-25
    • 2014-06-17
    • 2016-01-23
    • 1970-01-01
    相关资源
    最近更新 更多