表达式<Func<>>[]不使用参数有什么等价的?

What's the equivalent to not using params with Expression<Func<>>[]?

我在存储库基础 class 中有一些代码用于 Entity Framework 急切加载导航属性:

public virtual List<T> Find(Func<T, bool> where, params Expression<Func<T, object>>[] navigationProperties)
{
//blah biddy blah blah
}

那么在调用上面的方法时:

var beers = BeerRepository.Find(x => x.Type == "IPA", a => a.Ingredients, b => b.Sizes, c => c.Hangovers);

效果很好。我知道在调用方法时使用 "params" 提供了一个很棒的神奇快捷方式,我已经看到了一些简单的例子,说明没有它需要什么。

但是,当我从签名中删除参数时,我无法弄清楚如何调用上面的方法。

有什么想法吗?

不确定我是否理解你的问题。

你可以打电话给

beerRepository.Find((x => x.Type == "IPA")

然后在 Find() 中,您会看到导航属性数组将为空。

泛型方法是一种方法模板。如果你提供一个类型参数,它就会变成一个具体的、类型化的方法。你的方法(没有params)...

public virtual List<T> Find<T>(Func<T, bool> where, 
      Expression<Func<T, object>>[] navigationProperties)

...在 BeerRepository 中会变成类似...

public virtual List<Beer> Find(Func<Beer, bool> where, 
      Expression<Func<Beer, object>>[] navigationProperties)

...这清楚地表明您必须提供一个 Expression<Func<Beer, object>>[] 数组。构建它需要更笨重的代码,因为您无法利用类型推断:

var navProps = new Expression<Func<Beer, object>>[]
               {
                   a => a.Ingredients,
                   a => a.Sizes,
                   a => a.Hangovers
               });