有时能够将lambda表达式存储在业务逻辑中的某个位置是很好的,例如
Expression<Func<Supplier,bool>> SupplierHasHighRating = x => x.Rating > 90;
这就像规范模式的精简形式。所以你可以这样做:
var highRatedSuppliers = someQueryableOfSuppliers.Where(SupplierHasHighRating);
如果有一种方法可以在查询中针对与供应商相关的其他对象重用lambda,我想知道:
var productsOfHighRatedSuppliers = someQueryableOfProducts.Where(x => x.Supplier.Rating > 90);
我可以在某种程度上重用lambda吗?
编辑:如果您认为答案是肯定的,那么您能否根据上述示例展示如何做到这一点?
答案 0 :(得分:-1)
正如人们所指出的那样:绝对可以用表情来做。 然而,在大多数现实场景中,创建此类功能所需的时间会使其变得不可行。例如,考虑所有因素;表现可能是一个问题。
创建表达式访问者需要时间,动态表达式 hard ,如果您不熟悉它们,您可能会在完成任何实际工作之前杀死几个小时。如果您以前从未尝试过,那只是......非常不直观。
还有其他方法可以解决这个问题;一种方法是简单地使用继承。
例如,创建一个IRateable
,它只展示属性Rating
。然后只需在需要的地方继承它。
如你的例子所示:
public class Supplier : IRateable
{
public int Rating { get; set; }
}
public class Product : IRateable
{
// Get's the suppliers rating, tho, is this what you wanted?
public int Rating => Supplier.Rating;
public Supplier Supplier { get; set; }
}