Linq 到实体或 SQL 服务器?无法获得我需要的结果。 MVC 框架
Linq to Entities or SQL Server? Cannot get the results i require. MVC EF
我是 MVC 的新手/Entity Framework,正在尝试查询生成一些仪表板所需的数据。我正在为我的 MVC 项目使用数据库优先模型。下面是我的 Table 设计的概述。
每个会员都有一个注册的家庭位置(会员 FK (HomeLocationId) 到位置 PK (Id),一个会员可以有多个会员资格(会员 FK (MemberId) 到会员 PK (Id),最后每个会员资格与其包具有一对一的关系。
我想做的是根据用户当前活跃的会员套餐计算特定位置的会员数量。
例如对于伦敦(位置),获取其当前活跃会员资格 (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 查询来创建结果,但不确定它是否正确。 (我根据关系正确加入了吗)
from l in Locations
join m in Members on l.Id equals m.HomeLocationId
join ms in Memberships on m.Id equals ms.MemberId
where ms.MembershipStateId == 3
join p in Packages on ms.PackageId equals p.Id
where p.PackagePayInFull== true
select new {l, m, ms, p}
你举的例子:
var memberCount = context.Members
.Where(m => m.Location.Name == "London"
&& m.Memberships
.Any(ms => ms.MembershipStateId == 3
&& ms.Package.PackagePayInFull))
.Count();
我是 MVC 的新手/Entity Framework,正在尝试查询生成一些仪表板所需的数据。我正在为我的 MVC 项目使用数据库优先模型。下面是我的 Table 设计的概述。
每个会员都有一个注册的家庭位置(会员 FK (HomeLocationId) 到位置 PK (Id),一个会员可以有多个会员资格(会员 FK (MemberId) 到会员 PK (Id),最后每个会员资格与其包具有一对一的关系。
我想做的是根据用户当前活跃的会员套餐计算特定位置的会员数量。
例如对于伦敦(位置),获取其当前活跃会员资格 (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 查询来创建结果,但不确定它是否正确。 (我根据关系正确加入了吗)
from l in Locations
join m in Members on l.Id equals m.HomeLocationId
join ms in Memberships on m.Id equals ms.MemberId
where ms.MembershipStateId == 3
join p in Packages on ms.PackageId equals p.Id
where p.PackagePayInFull== true
select new {l, m, ms, p}
你举的例子:
var memberCount = context.Members
.Where(m => m.Location.Name == "London"
&& m.Memberships
.Any(ms => ms.MembershipStateId == 3
&& ms.Package.PackagePayInFull))
.Count();