假设我必须管理大门和这些大门的可用性。
这是我的模特:
public class Gate
{
public int GateID { get; set; }
public string GateName { get; set; }
}
public class GateNA ---> NA: NotAvailable
{
public int GateNAID { get; set; }
public int GateID { get; set; }
public DateTime Date { get; set; }
}
现在假设我有以下示例数据:
盖茨:
GateID:1 GateName:“圣安东尼奥门”
GateID:2 GateName:“圣达菲门”
GateID:3 GateName:“圣玛丽亚之门”
这些大门在特定日期不可用(>>> GateNA类):
GateIDNA:1 GateID:2 日期:2012/06/01
GateIDNA:2 GateID:1 日期:2012/08/08
我可以像这样检索所有以“圣诞老人”开头的大门:
var gateRepository = unitOfWork.Create<Gate>();
var gates = gateRepository.Find(m => m.GateName.Contains("Santa"));
我的问题是如何在2012/06/01和2012/06/05之间检索以“圣诞老人”开头且可用的所有登机口。所以我们必须检查GateNA ......
结果应该只有一个元素:GateID 3。
有什么想法吗?
感谢。
答案 0 :(得分:1)
最简单的解决方案是将GateNA
集合的导航属性添加到Gate
实体并在查询中使用它:
gateRepository.Find(m => m.GateName.Contains("Santa") &&
!m.GateNAs.Any(g => g.Date == selectedDate));
如果不添加属性,则必须在LINQ查询中执行手动连接。
答案 1 :(得分:0)
为什么不重组你的课程:
public class Gate
{
public int GateID { get; set; }
public string GateName { get; set; }
public List<GateNA> NotAvailableDates { get; set; }
}
public class GateNA ---> NA: NotAvailable
{
public int GateNAID { get; set; }
public int GateID { get; set; }
public DateTime Date { get; set; }
}
然后
var gates = gateRepository.Find(
m => m.GateName.Contains("Santa") &&
(m.NotAvailableDates.Find(
d => d.Date==new DateTime(2012,06,01)
)==null
);