相关疑难解决方法(0)

将expression参数作为参数传递给另一个表达式

我有一个筛选结果的查询:

public IEnumerable<FilteredViewModel> GetFilteredQuotes()
{
    return _context.Context.Quotes.Select(q => new FilteredViewModel
    {
        Quote = q,
        QuoteProductImages = q.QuoteProducts.SelectMany(qp => qp.QuoteProductImages.Where(qpi => q.User.Id == qpi.ItemOrder))
    });
}
Run Code Online (Sandbox Code Playgroud)

在where子句中,我使用参数q将属性与参数qpi中的属性进行匹配.因为过滤器将在几个地方使用,我正在尝试将where子句重写为表达式树,它看起来像这样:

public IEnumerable<FilteredViewModel> GetFilteredQuotes()
{
    return _context.Context.Quotes.Select(q => new FilteredViewModel
    {
        Quote = q,
        QuoteProductImages = q.QuoteProducts.SelectMany(qp => qp.QuoteProductImages.AsQueryable().Where(ExpressionHelper.FilterQuoteProductImagesByQuote(q)))
    });
}
Run Code Online (Sandbox Code Playgroud)

在此查询中,参数q用作函数的参数:

public static Expression<Func<QuoteProductImage, bool>> FilterQuoteProductImagesByQuote(Quote quote)
{
    // Match the QuoteProductImage's ItemOrder to the Quote's Id
}
Run Code Online (Sandbox Code Playgroud)

我该如何实现这个功能?或者我应该使用不同的方法吗?

c# lambda expression entity-framework expression-trees

8
推荐指数
1
解决办法
4793
查看次数