C# SQL到实体-复杂查询选择日期
我首先使用实体框架代码,我想查询数据库中的约会表,选择:C# SQL到实体-复杂查询选择日期,c#,entity-framework,linq,C#,Entity Framework,Linq,我首先使用实体框架代码,我想查询数据库中的约会表,选择: 指定日期的所有约会 public IEnumerable<Appointment> GetAppointments(IEnumerable<DateTime> datesWithEverything) { using (OneClickContext context = new OneClickContext()) { var query = from e in context.Ap
public IEnumerable<Appointment> GetAppointments(IEnumerable<DateTime> datesWithEverything)
{
using (OneClickContext context = new OneClickContext())
{
var query = from e in context.AppointmentSet
where datesWithEverything.Contains(e.StartDate)
select e;
return query;
}
}
public IEnumerable GetAppointment(IEnumerable日期和所有内容)
{
使用(OneClickContext=newOneClickContext())
{
var query=来自context.AppointmentSet中的e
where dates包含所有内容(例如StartDate)
选择e;
返回查询;
}
}
非常感谢您的帮助。如果我正确理解您的需求,您将获得一系列日期的所有约会数据,然后您只需知道至少有一个约会的所有其他日期,即可将其加粗。实际上,您还没有在其他日期使用约会数据。对吗 您尝试限制访问数据库的次数是正确的,但是您需要平衡这一点,同时不返回超出实际需要的数据。如果我理解正确,您需要的只是约会日期,您应该使用第二个查询:
public IEnumerable<DateTime> GetDatesWithAppointments()
{
using (OneClickContext context = new OneClickContext())
{
var query = (from e in context.AppointmentSet
order by e.StartDate
select e.StartDate).Distinct();
return query.ToList();
}
}
请注意ToList()
。Linq查询执行被推迟到第一次枚举它,并且在using块中声明查询上下文时。在这种情况下,必须在using块退出之前执行查询
在编辑时,由于您需要实际的约会,所以您应该能够使用linq的联合和分组在一次旅行中获得您想要的。Union将自动删除任何重复条目
public IEnumerable<Appointment> GetAppointments(IEnumerable<DateTime> datesWithEverything)
{
using (OneClickContext context = new OneClickContext())
{
var query = from e in context.AppointmentSet
where datesWithEverything.Contains(e.StartDate)
select e;
query = query.Union(from e in context.AppointmentSet
group e by DbFunctions.TruncateTime(e.StartDate) into grp
select grp.FirstOrDefault());
return query.ToList();
}
}
public IEnumerable GetAppointment(IEnumerable日期和所有内容)
{
使用(OneClickContext=newOneClickContext())
{
var query=来自context.AppointmentSet中的e
where dates包含所有内容(例如StartDate)
选择e;
query=query.Union(来自context.AppointmentSet中的e)
按DbFunctions.TruncateTime(e.StartDate)将e分组到grp中
选择grp.FirstOrDefault());
返回query.ToList();
}
}
如果您确实需要其他日期的约会数据,请共享示例数据和表格结构。如果我得到了日期,我需要创建假约会来绑定它们(MVVM)。我想知道我是否可以用一次数据库访问来完成。谢谢迪米特里抽出时间。不幸的是,因为我使用的是SQLite数据库,所以不支持应用连接。
public IEnumerable<Appointment> GetAppointments(IEnumerable<DateTime> datesWithEverything)
{
using (OneClickContext context = new OneClickContext())
{
var query = from e in context.AppointmentSet
where datesWithEverything.Contains(e.StartDate)
select e;
query = query.Union(from e in context.AppointmentSet
group e by DbFunctions.TruncateTime(e.StartDate) into grp
select grp.FirstOrDefault());
return query.ToList();
}
}