选择器和条件的组合

时间:2015-04-06 19:11:06

标签: c# linq expression

我有一个使用PredicateBuilder构建的非常复杂的条件但现在要使用它我需要将它与字段选择器结合使用以在Where子句中使用。

示例:

class A
    {
        public A()
        {
            Test = DateTime.Now.ToString("yyyyMMddHHmmsszz");
        }

        public string Test { get; set; }
    }

    class B
    {
        public A AProp { get; set; } 
    }

    static void Main(string[] args)
    {
        var list = Enumerable.Range(0, 10)
            .Select(_ => new B())
            .ToList();

        var result = list
            .AsQueryable()
            .Where(GetFilter(b => b.AProp))
            .ToList();

        Console.ReadKey();
    }

    private static Expression<Func<B, bool>> GetFilter(Expression<Func<B, A>> selector)
    {
        // some complex condition to apply on property AProp 
        Expression<Func<A, bool>> condition = a => a.Test.Contains("2015");

        return b => true; // Like b.AProp.Test.Contains("2015");
    }

限制:

  • B可以是任何通用类型
  • 条件非常复杂
  • 应该足够简单,可以通过NHibernate.Linq并获取SQL

0 个答案:

没有答案