How can I reuse expressions within LINQ statements?

后端 未结 4 1595
南笙
南笙 2020-12-14 17:03

I like to reuse expressions for DRY reasons, but how do I reuse the expressions within a LINQ statement?

e.g.

I have

public static class MyE         


        
4条回答
  •  温柔的废话
    2020-12-14 17:40

    I had the same problem and wanted to preserve the ability to use extension methods within the query syntax (as with ordinary supported functions...). A solution might be this library (spoiler: I‘m the author).

    You just implement the method to reuse twice, once for general use and once for queries.

    public static class MyFunctions {
        [InjectLambda]
        public static bool IsAGoodProduct(Product product) {
            return product.Quality>3;
        }
        public static Expression> IsAGoodProduct() {
            return (p) => p.Quality>3;
        }
    }
    

    The actual query can then look like expected.

    var goodProds = from p in dataContext.Products.ToInjectable()
                    where p.IsAGoodProduct()
                    select p;
    

    The ToInjectable call creates a lightweight proxy, which replaces the IsAGoodProduct method call (if marked accordingly) with the desired lambda expression. Thus, you can use extension methods wherever within the query -- parameterized methods work as well.

提交回复
热议问题