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

我是 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?


芜湖不芜
浏览 104回答 1
1回答

米琪卡哇伊

我无法弄清楚如何对Coffee类本身进行操作,但是您可以在IQueryable<Coffee>.例如:public&nbsp;static&nbsp;class&nbsp;Extensions{&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;IQueryable<Coffee>&nbsp;GetPriceMoreThen(this&nbsp;IQueryable<Coffee>&nbsp;query,&nbsp;decimal&nbsp;moreThen) &nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;query.Where(c&nbsp;=> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c.Prices &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.OrderByDescending(p&nbsp;=>&nbsp;p.CreatedAt) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.First() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.Price&nbsp;>=&nbsp;moreThen); &nbsp;&nbsp;&nbsp;&nbsp;} }然后你可以这样称呼query&nbsp;=&nbsp;query.GetPriceMoreThen(request.MoreThen);免责声明:我在这里对你的模型做了一些假设
打开App,查看更多内容
随时随地看视频慕课网APP