C# .NET使用表达式树查看列表是否在另一个列表中

C# .NET使用表达式树查看列表是否在另一个列表中,c#,lambda,expression,rules,C#,Lambda,Expression,Rules,我正在开发一个规则引擎。由于业务规则的性质,一种可能的解决方案是使用表达式根据规则动态调用方法。由于我不熟悉表达式,我不确定如何执行以下操作: public class Order { public Order() { this.Items = new List<Item>(); } public int OrderId { get; set; } public Custo

我正在开发一个规则引擎。由于业务规则的性质,一种可能的解决方案是使用表达式根据规则动态调用方法。由于我不熟悉表达式,我不确定如何执行以下操作:

public class Order
    {
        public Order()
        {
            this.Items = new List<Item>();
        }
        public int OrderId { get; set; }
        public Customer Customer { get; set; }
        public IList<Item> Items { get; set; }
    }

    public class Item
    {
        public decimal Cost { get; set; }
        public string ItemCode { get; set; }
        public int Status { get; set; }
    }

    public class Customer
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public Country Country { get; set; }
    }
    public class Country
    {
        public string CountryCode { get; set; }
    }
}

你运行代码了吗?你遇到了什么问题?不确定是否有绝对答案,但我建议你把支票翻过来,然后检查
x.Status!=1
第一;使用
list.Contains进行迭代没有意义,只是为了抛出结果,因为
x.Status==1
list.Contains中的
list
是什么。这只是众多规则中的一条,我需要在表达式中构建它,但我不知道如何实现;
public Order GetOrder()
        {
            Order order = new Order()
            {
                OrderId = 1,
                Customer = new Customer()
                {
                    FirstName = "John",
                    LastName = "Doe",
                    Country = new Country()
                    {
                        CountryCode = "AUS"
                    }
                },
                Items = new List<Item>(){
                    new Item(){ ItemCode = "MM23", Cost=5.25M, Status=1},
                    new Item(){ ItemCode = "LD45", Cost=5.25M, Status=0},
                    new Item(){ ItemCode = "Test", Cost=3.33M, Status=1},
                }
            };
            return order;
        }
 GetOrder().Items.Where(x => list.Contains(x.ItemCode) && x.Status !=1).Any();