【发布时间】:2016-02-11 10:53:30
【问题描述】:
我在过滤使用 linq 返回的记录时遇到问题。涉及的对象如下所示:
约会
public partial class Appointment
{
public Appointment()
{
Callbacks = new HashSet<Callback>();
}
[Key()]
public int AppointmentId { get; set; }
public DateTime Start { get; set; }
public DateTime? Deleted { get; set;}
public virtual ICollection<Callback> Callbacks { get; set; }
}
回调
public partial class Callback
{
[Key()]
public int CallbackId { get; set; }
public DateTime? Deleted { get; set; }
public virtual Appointment Appointment { get; set; }
public virtual User AssignedTo { get; set; }
}
用户
public partial class User
{
public User()
{
Callbacks = new HashSet<Callback>();
}
[Key()]
public int UserId { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public string Ref { get; set; }
public virtual ICollection<Callback> Callbacks { get; set; }
}
我正在尝试返回满足以下条件的记录:
- 约会
start日期必须等于searchDate - 约会未被删除
- 约会
start日期不得与用户已有的任何约会发生冲突
我已尝试使用以下查询,但未返回任何结果(日期为 01/03/2016 (dd/mm/yyyy) 的约会可用。
public List<AppointmentSearchResultsViewModel> SearchByDate(DateTime searchDate, string userName)
{
return _context.Appointments
.Where(a =>
a.Start.Date == searchDate
&& a.Deleted == null
&& a.Callbacks.Any(c =>
!(c.Appointment.Start != a.Start
&& c.AssignedTo.Ref == userName
&& c.Deleted == null)
))
.OrderBy(a => a.Start)
.Select(a)
.ToList();
}
谁能帮助我了解如何根据上述标准正确过滤?
编辑
尝试澄清模型:
- 用户有回调
- 回拨有约会
此查询的目的是搜索searchDate 上用户尚未在约会时间安排回叫的所有约会。
【问题讨论】:
-
您的型号和您的代码不匹配。所以不清楚你在问什么。您是否尝试过滤回调或约会?这个 Linq 是如何编译的?
-
您说的是“约会开始日期必须等于 searchDate”,然后您说的是“约会开始日期不得与用户已有的任何约会发生冲突”。怎么会?
-
@CetinBasoz 表示
searchdate尚未添加到任何用户约会中。 -
@CetinBasoz 我已经更新了问题,试图阐明查询的意图以及模型的工作原理。
-
我写了一个 aswer,但如果其他人看到一些示例数据来了解你想要做什么,那就太好了。查询回调可能是多余的操作。
标签: c# asp.net-mvc entity-framework linq