C# Linq到实体还是SQL Server?无法获得我需要的结果。MVC EF

C# Linq到实体还是SQL Server?无法获得我需要的结果。MVC EF,c#,asp.net-mvc,linq,entity-framework,C#,Asp.net Mvc,Linq,Entity Framework,我是MVC/Entity框架的新手,尝试查询生成一些仪表板所需的数据。我正在为我的MVC项目使用数据库第一模型。下面是我的表格设计概述 每个成员都有一个注册的主位置(成员FK(HomeLocationId)到位置PK(Id)),一个成员可以有多个成员身份(成员FK(MemberId)到成员PK(Id)),最后,每个成员身份对其包都有一对一的关系 我要做的是根据当前活动成员的包,获取特定位置的成员数 e、 g.对于伦敦(位置),获取其当前活动成员身份(MembershipStateId=3)的所

我是MVC/Entity框架的新手,尝试查询生成一些仪表板所需的数据。我正在为我的MVC项目使用数据库第一模型。下面是我的表格设计概述

每个成员都有一个注册的主位置(成员FK(HomeLocationId)到位置PK(Id)),一个成员可以有多个成员身份(成员FK(MemberId)到成员PK(Id)),最后,每个成员身份对其包都有一对一的关系

我要做的是根据当前活动成员的包,获取特定位置的成员数

e、 g.对于伦敦(位置),获取其当前活动成员身份(MembershipStateId=3)的所有成员的计数,并将此活动成员身份的包作为属性PackagePayInFull布尔值设置为true

我知道在EF和Linq中我可以获取实体(例如,db.Locations.Members可以获取位置的成员数),但我不确定如何将此查询扩展到似乎执行子查询。我也不确定是否更容易从单个SQL查询中获取数据

我尝试在成员模型中创建一个方法来检索activeMembership,但它抱怨我无法使用该查询检索成员对象

db.Members.ToList().Where(m => m.HomeLocationId == this.Id && m.getActiveMembership().Package.PackagePayInFull == payinfull).ToList();
如果有人能指引我正确的方向,那就太棒了

更新:

我尝试过使用Linq查询来创建结果,但不确定它是否正确。(我是否根据关系正确加入)


对于您给出的示例:

var memberCount = context.Members
                         .Where(m => m.Location.Name == "London"
                                  && m.Memberships
                                      .Any(ms => ms.MembershipStateId == 3
                                              && ms.Package.PackagePayInFull))
                         .Count();

对于您给出的示例:

var memberCount = context.Members
                         .Where(m => m.Location.Name == "London"
                                  && m.Memberships
                                      .Any(ms => ms.MembershipStateId == 3
                                              && ms.Package.PackagePayInFull))
                         .Count();

对于您给出的示例:

var memberCount = context.Members
                         .Where(m => m.Location.Name == "London"
                                  && m.Memberships
                                      .Any(ms => ms.MembershipStateId == 3
                                              && ms.Package.PackagePayInFull))
                         .Count();

对于您给出的示例:

var memberCount = context.Members
                         .Where(m => m.Location.Name == "London"
                                  && m.Memberships
                                      .Any(ms => ms.MembershipStateId == 3
                                              && ms.Package.PackagePayInFull))
                         .Count();


错误消息是什么?错误消息类似于:LINQ to Entities无法识别getActiveMembership()方法。我确实意识到我这样做是错误的,我希望一个更智能的查询会有所帮助。您不能在linq语句中运行代码。例如,getActiveMembership无法转换为sql语法,然后通过sql引擎运行。linq本质上只是转换为sql语句。我一直都在自找麻烦他花了很多时间尝试做一些事情,比如你在那里做的事情。对。没有它怎么办呢?我对SQL语句非常糟糕,不确定如何连接不同的表以获得正确的结果。错误消息是什么?错误消息是这样的:LINQ to Entities无法识别getActiveMembe方法rship()。我确实意识到我这样做是错误的,我希望一个更智能的查询会有所帮助。您不能在linq语句中运行代码。例如,getActiveMembership无法转换为sql语法,然后通过sql引擎运行。linq本质上只是转换为sql语句。我一直都在自找麻烦他花了很多时间尝试做一些事情,比如你在那里做的事情。对。没有它怎么办呢?我对SQL语句非常糟糕,不确定如何连接不同的表以获得正确的结果。错误消息是什么?错误消息是这样的:LINQ to Entities无法识别getActiveMembe方法rship()。我确实意识到我这样做是错误的,我希望一个更智能的查询会有所帮助。您不能在linq语句中运行代码。例如,getActiveMembership无法转换为sql语法,然后通过sql引擎运行。linq本质上只是转换为sql语句。我一直都在自找麻烦他花了很多时间尝试做一些事情,比如你在那里做的事情。对。没有它怎么办呢?我对SQL语句非常糟糕,不确定如何连接不同的表以获得正确的结果。错误消息是什么?错误消息是这样的:LINQ to Entities无法识别getActiveMembe方法rship()。我确实意识到我这样做是错误的,我希望一个更智能的查询会有所帮助。您不能在linq语句中运行代码。例如,getActiveMembership无法转换为sql语法,然后通过sql引擎运行。linq本质上只是转换为sql语句。我一直都在自找麻烦他花了很多时间尝试做一些事情,比如你在那里做的事情。对。没有它怎么办?我对SQL语句非常糟糕,不知道如何连接不同的表以获得正确的结果。谢谢。使用Linq pad,我已经成功地复制了它,并得到了我预期的结果,非常感谢远不止这些..我需要做一些测试数据来尝试一下.谢谢这个..使用Linq pad我已经成功地复制了它并得到了我预期的结果,所以谢谢你到目前为止..我需要做一些测试数据来尝试一下.谢谢这个..使用Linq pad我已经成功地复制了它并得到了我想要的结果我需要做一些测试数据来尝试一下。谢谢。使用Linq pad,我成功地复制了它,并得到了我所期望的结果。谢谢你。我需要做一些测试数据来尝试一下。