如何编写此 LINQ 表达式?
How can I compose this LINQ expression?
我正在创建一个 web 应用程序来管理飞行学校,我有以下数据库结构(不相关的 table 已被模糊处理,相关的已被翻译成英文以便清楚):
我有一个 table Deadlines 存储与飞机相关的所有截止日期。此 table 链接到 Aircrafts table。然后我有一个 OwnedAircrafts table 存储飞机和人员的 ID(因为一个人可以拥有多架飞机或其中的一部分)。
我的问题是:
给定一个人的 ID,如何检索与 his/her 飞机相关的截止日期列表? (最好使用方法语法)
换句话说:
下面的代码现在returns所有飞机的截止日期,不管主人是谁。我如何引用 OwnedAircrafts table 以仅过滤与 personId?
相关的截止日期
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context.Deadlines
.Select(deadline => new DeadlineViewModel
{
Id = deadline.Id,
Aircraft = deadline.Aircraft,
Model = deadline.AircraftsNavigation.Model,
IdDeadlineType = deadline.DeadlineType,
DeadlineType = deadline.DeadlineTypesNavigation.Description
// other fields...
});
提前致谢!
尝试以下操作:
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context.Deadlines
.Where(x => x.deadline.ID == 12345)
.Select(deadline => new DeadlineViewModel
{
Id = deadline.Id,
Aircraft = deadline.Aircraft,
Model = deadline.AircraftsNavigation.Model,
IdDeadlineType = deadline.DeadlineType,
DeadlineType = deadline.DeadlineTypesNavigation.Description
// other fields...
});
遵循这种方法:
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context
.OwnedAircarfs
.Where( s => s.Persona == YourPersonId)
.Includes(s=> s.AirCrafts)
.ThenIncludes(s=> s.Deadlines)
.Select(deadline => new DeadlineViewModel
{
//use navigation properties to get value of related tables
// other fields...
}).ToList();
您可以向您的实体添加导航属性,然后尝试这样的操作:
var user = _context.Users
.Include(user => user.OwnedAircrafts)
.ThenInclude(ownedAircraft => ownedAircraft.Aircraft)
.ThenInclude(aircraft => aircraft.Deadlines)
.FirstOrDefault(user => user.Id == userId)
return user.OwnedAircrafts
.SelectMany(ownedAircraft => ownedAircraft.Aircraft.Deadlines);
您不需要查询人员 table,因为人员 ID 在 OwendAircrafts
中可用
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context.Deadlines
.Where(deadline =>
deadline.Aircraft.OwnedAircrafts.Any(oa => oa.persona == personId))
.Select(deadline => new DeadlineViewModel
{
Id = deadline.Id,
Aircraft = deadline.Aircraft,
Model = deadline.AircraftsNavigation.Model,
IdDeadlineType = deadline.DeadlineType,
DeadlineType = deadline.DeadlineTypesNavigation.Description
// other fields...
});
}
这假设您在 Aircraft
中有一个导航 属性 OwnedAircrafts
。
我正在创建一个 web 应用程序来管理飞行学校,我有以下数据库结构(不相关的 table 已被模糊处理,相关的已被翻译成英文以便清楚):
我有一个 table Deadlines 存储与飞机相关的所有截止日期。此 table 链接到 Aircrafts table。然后我有一个 OwnedAircrafts table 存储飞机和人员的 ID(因为一个人可以拥有多架飞机或其中的一部分)。
我的问题是:
给定一个人的 ID,如何检索与 his/her 飞机相关的截止日期列表? (最好使用方法语法)
换句话说:
下面的代码现在returns所有飞机的截止日期,不管主人是谁。我如何引用 OwnedAircrafts table 以仅过滤与 personId?
相关的截止日期 IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context.Deadlines
.Select(deadline => new DeadlineViewModel
{
Id = deadline.Id,
Aircraft = deadline.Aircraft,
Model = deadline.AircraftsNavigation.Model,
IdDeadlineType = deadline.DeadlineType,
DeadlineType = deadline.DeadlineTypesNavigation.Description
// other fields...
});
提前致谢!
尝试以下操作:
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context.Deadlines
.Where(x => x.deadline.ID == 12345)
.Select(deadline => new DeadlineViewModel
{
Id = deadline.Id,
Aircraft = deadline.Aircraft,
Model = deadline.AircraftsNavigation.Model,
IdDeadlineType = deadline.DeadlineType,
DeadlineType = deadline.DeadlineTypesNavigation.Description
// other fields...
});
遵循这种方法:
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context
.OwnedAircarfs
.Where( s => s.Persona == YourPersonId)
.Includes(s=> s.AirCrafts)
.ThenIncludes(s=> s.Deadlines)
.Select(deadline => new DeadlineViewModel
{
//use navigation properties to get value of related tables
// other fields...
}).ToList();
您可以向您的实体添加导航属性,然后尝试这样的操作:
var user = _context.Users
.Include(user => user.OwnedAircrafts)
.ThenInclude(ownedAircraft => ownedAircraft.Aircraft)
.ThenInclude(aircraft => aircraft.Deadlines)
.FirstOrDefault(user => user.Id == userId)
return user.OwnedAircrafts
.SelectMany(ownedAircraft => ownedAircraft.Aircraft.Deadlines);
您不需要查询人员 table,因为人员 ID 在 OwendAircrafts
IEnumerable<DeadlineViewModel> GetDeadlinesOfAPerson(long personId)
{
return _context.Deadlines
.Where(deadline =>
deadline.Aircraft.OwnedAircrafts.Any(oa => oa.persona == personId))
.Select(deadline => new DeadlineViewModel
{
Id = deadline.Id,
Aircraft = deadline.Aircraft,
Model = deadline.AircraftsNavigation.Model,
IdDeadlineType = deadline.DeadlineType,
DeadlineType = deadline.DeadlineTypesNavigation.Description
// other fields...
});
}
这假设您在 Aircraft
中有一个导航 属性 OwnedAircrafts
。