为了账号安全,请及时绑定邮箱和手机立即绑定

Entity Framework Core - 调用 Where linq 方法没有关系

Entity Framework Core - 调用 Where linq 方法没有关系

C#
芜湖不芜 2023-04-16 09:46:59
我是 EF Core 的新手,尝试执行以下操作时遇到问题。我有一些根据价格过滤咖啡的业务逻辑:if(request.MoreThen != null)            {                query = query.Where(c =>                    c.Prices                    .OrderByDescending(p => p.CreatedAt)                    .First()                    .Price                    >= request.MoreThen);            }它工作得很好。但是,当我尝试将此功能提取到私有方法中时,我发现该Prices关系为空。现在,我有几个地方需要参考最新价格,这是第二个如果:            if(request.MoreThen != null)            {                query = query.Where(c =>                    c.Prices                    .OrderByDescending(p => p.CreatedAt)                    .First()                    .Price                    >= request.MoreThen);            }我发现这根本不是 DRY,所以我想将价格提取提取到私有方法中,如下所示:private decimal GetPrice(Coffee model) {  return model.Prices     .OrderByDescending(p => p.CreatedAt)     .First()     .Price}但是,现在当我替换查询时:   query = query.Where(c => GetPrice(c) <= request.LessThen)我收到一个奇怪的错误,在调试器中,除包含的字段外,每个字段都存在。(请注意,我调用了) 方法。.Include完整的代码示例包含在我在 Github 上的开源项目中编辑:我使用 Postgres 作为数据库引擎,代码优先方法.Prices所以我的问题是,即使我在方法的开头包含了它们,为什么还是null?
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我无法弄清楚如何对Coffee类本身进行操作,但是您可以在IQueryable<Coffee>.

例如:

public static class Extensions{    public static IQueryable<Coffee> GetPriceMoreThen(this IQueryable<Coffee> query, decimal moreThen)
    {        return query.Where(c =>
                           c.Prices
                            .OrderByDescending(p => p.CreatedAt)
                            .First()
                            .Price >= moreThen);
    }
}

然后你可以这样称呼

query = query.GetPriceMoreThen(request.MoreThen);

免责声明:我在这里对你的模型做了一些假设


查看完整回答
反对 回复 2023-04-16
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信