我的SQL Server数据库organisation
和event
中有两个表。
一个组织有多个活动。每个活动都有自己的date
。
我试图用它的组织name
检索下一个/即将举办的活动日期。下一个事件是事件日期等于今天或后几天。
我试过这样的事情(显然不起作用):
var queryResults = (from o in context.Organisations
join e in context.Events on o.Id equals e.Organisation.Id
where e.PremiereDateTime >= DateTime.UtcNow
orderby e.PremiereDateTime ascending
select o, e);
我试图做group by
,但我失败了。我使用普通的T-SQL查询,但我希望使用Entity Framework。
更新
我忘了提到我试图在下次活动的日期只选择一次该组织的名称。每个组织应该只有下一个即将举行的活动。
更新#2
期望的输出:
organisation1
下一个活动:date3
organisation2
下一个活动:date4
更新#3
这就是我现在所拥有的:
var result = from org in context.Organisations
join sorg in context.SubOrganisations on org.Id equals sorg.Organisation.Id into sorg2
from s in sorg2.DefaultIfEmpty()
join ev in context.Events on s.Id equals ev.SubOrganisation.Id into ev2
from e in ev2.DefaultIfEmpty()
select new
{
Name = org.Name,
UpcomingEvent = (from ee in s.Events
where ee.PremiereDateTime >= DateTime.UtcNow
orderby ee.PremiereDateTime ascending
select ee).FirstOrDefault()
};
答案 0 :(得分:1)
您可以这样做:
var result =
context
.Organisations
.Select(org =>
new
{
Name = org.Name, //Assuming that you have a `Name` property on Organisation
UpcommingEvent =
org.Events
.Where(e => e.PremiereDateTime >= DateTime.UtcNow)
.OrderBy(e => e.PremiereDateTime)
.FirstOrDefault()
})
.ToList();
这从组织开始。对于每一个,它选择其名称以及在DateTime.UtcNow
之后开始的第一个事件。
请注意,对于没有即将举办的活动的组织,UpcommingEvent
为null
。
以下是使用查询语法完成相同查询的方法:
var result =
from org in context.Organisations
select new
{
Name = org.Name,
UpcommingEvent = (from e in org.Events
where e.PremiereDateTime >= DateTime.UtcNow
orderby e.PremiereDateTime ascending
select e).FirstOrDefault()
};