获取所有Parents,但只有一个儿子和一个孙子的条件
Get all Parents, but only one son and one grandson for a condition
我有这样的结构:
Topics.SubTopics.Events
Topics.Users
Users.Topics
Topics
和Users
是many-to-many关系。
我想检索 PremiereDateTimeInUtc
(事件的 属性)为 equal or greater then yesterday
且 Topics.Users.Id == userId
的所有主题、子主题和事件。但是每个主题只应检索 1 个事件(昨天的第一个事件)。并且只有作为事件 parent 的副主题。但是即使没有子主题和事件的主题也必须全部返回。
到目前为止我试过这个:
return context.Topics
.Include(
t => t.SubTopics.Select(
s => s.Events
.Any(e => e.PremiereDateTimeInUtc >= DateTime.Today.AddDays(-1))
)
)
.Where(t => t.Users.Any(u => u.Id == userId)).ToList();
但这不起作用。我得到这个异常:“Include 路径表达式必须引用在类型上定义的导航 属性。对引用导航属性使用点路径,对集合导航属性使用 Select 运算符。
参数名称:path.
var yesterday =DateTime.Today.AddDays(-1);
var events = context.Events.Where(x=>x.PremiereDateTimeInUtc>=yesterday)
.GroupBy(x=>x.Subtopic.TopicId, (k,g)=>new{
TopicId=k,
Event=g.OrderBy(e=>e.PremiereDateTimeInUtc).FirstOrDefault()
});
var topics = context.Topics
.Where(t=>t.Users.Any(u=>u.Id==userId))
.GroupJoin(events, t=>t.Id, e=>e.TopicId,(t,g)=>new{
Topic=t,
FirstEvent=g.FirstOrDefault(),
Subtopic=g.FirstOrDefault().Subtopic
});
我有这样的结构:
Topics.SubTopics.Events
Topics.Users
Users.Topics
Topics
和Users
是many-to-many关系。
我想检索 PremiereDateTimeInUtc
(事件的 属性)为 equal or greater then yesterday
且 Topics.Users.Id == userId
的所有主题、子主题和事件。但是每个主题只应检索 1 个事件(昨天的第一个事件)。并且只有作为事件 parent 的副主题。但是即使没有子主题和事件的主题也必须全部返回。
到目前为止我试过这个:
return context.Topics
.Include(
t => t.SubTopics.Select(
s => s.Events
.Any(e => e.PremiereDateTimeInUtc >= DateTime.Today.AddDays(-1))
)
)
.Where(t => t.Users.Any(u => u.Id == userId)).ToList();
但这不起作用。我得到这个异常:“Include 路径表达式必须引用在类型上定义的导航 属性。对引用导航属性使用点路径,对集合导航属性使用 Select 运算符。 参数名称:path.
var yesterday =DateTime.Today.AddDays(-1);
var events = context.Events.Where(x=>x.PremiereDateTimeInUtc>=yesterday)
.GroupBy(x=>x.Subtopic.TopicId, (k,g)=>new{
TopicId=k,
Event=g.OrderBy(e=>e.PremiereDateTimeInUtc).FirstOrDefault()
});
var topics = context.Topics
.Where(t=>t.Users.Any(u=>u.Id==userId))
.GroupJoin(events, t=>t.Id, e=>e.TopicId,(t,g)=>new{
Topic=t,
FirstEvent=g.FirstOrDefault(),
Subtopic=g.FirstOrDefault().Subtopic
});