c# - 如何在 LINQ 语句中重用表达式?

标签 c# linq lambda

出于 DRY 的原因,我喜欢重用表达式,但如何在 LINQ 语句中重用表达式?

例如

我有

public static class MyExpressions {
    public static Expression<Func<Product,bool>> IsAGoodProduct() {
        return (p) => p.Quality>3;
    }
}

并且想在 LINQ 语句中使用它,所以

  var goodProds = from p in dataContext.Products
                  where ????? // how do I use IsAGoodProduct here?
                  select p;

当然,我可以使用 IQueryableExtension.Where 函数,但是对于更复杂的查询,这会使连接和其他函数变得更难看。

这是可能的还是 LINQ 的限制?

最佳答案

如果您从 LINQ 语法糖转移,则可能:

var goodProds = dataContext.Products.Where(MyExpressions.IsAGoodProduct());

没有它,这是不可能的。

不过,没有什么可以阻止您混合使用这两种样式来构建单个查询。

例子:

  var goodProds = from p in dataContext.Products
                                       .Where(MyExpressions.IsAGoodProduct())
                  group p by p.Category into g 
                  select new {Category = g.Key, ProductCount = g.Group.Count()};

关于c# - 如何在 LINQ 语句中重用表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/986877/

相关文章:

c# - 获取Unity中所有标签的列表

c# - 如何使用 Regex.Split 拆分字符串并保留所有分隔符?

c# - 如何使用反射将 DataTable 转换为 List<T>

java8函数式接口(interface)处理回调

C++ - 使用 lambda 将 map 添加到 map

c# - WPF:仅在命令可以执行时才应用DataTemplate-Style

c# - 我收到错误 "The DELETE statement conflicted with the REFERENCE constraint"

c# - 用于创建一系列单独对象的 Linq 方法?

c# - Parallel.ForEach 错误 HttpContext.Current

c# - 为什么在没有返回值的 lambda 中添加 throw 会被推断为 Func<T> 而不是 Action?