我现在正在制定逻辑,使用linq从数据库中检索数据,但我真的不知道如何做逻辑。
这是方案
我需要检索本月一周内发生的所有事件。
(仅举例)
我们假设一周从1/15/2016
开始,到1/21/2016
然后是数据
------------------------------
Starts | Ends
------------------------------
1/1/2016 | 1/31/2016
1/16/2016 | 1/17/2016
1/1/2016 | 1/16/2016
1/18/2016 | 1/30/2016
1/1/2016 | 1/14/2016
1/22/2016 | 1/31/2016
因此,如果您根据数据和周输出应
------------------------------
Starts | Ends
------------------------------
1/1/2016 | 1/31/2016
1/16/2016 | 1/17/2016
1/1/2016 | 1/16/2016
1/18/2016 | 1/30/2016
因为数据的任何日期属于过滤器值,即周
任何人都可以帮我搞清楚。我很高兴听到你们的任何想法。如果我的问题不是那么清楚就发表评论。
我现在正在使用linq而我只使用>=
和<=
,但我认为情况太独特或者我不仅仅习惯了它。
答案 0 :(得分:4)
我想你要求那些活跃的项目在这一周,你正在寻找:
query.Where(x.EndData >= weekStartDate && x.StartDate <= weekEndDate)
即如果它已经结束并且在本周结束时开始,那么在一周内某些事情是活跃的。根据您的结束日期是包含性的还是排他性的(即如果某些事情在星期五结束,它会在周五的开始或结束时结束)您可能会将>=
更改为>
答案 1 :(得分:2)
eventsCollection.Where(!(x.enddate <= startdate || x.startdate >= enddate))
排除eventenddate小于startdate或事件startdate大于提供的enddate的所有事件。
答案 2 :(得分:1)
tv2Events.Where(h => (h.Start <= weekStart && h.End >= weekEnd) || //the period include the whole week
(h.Start >= weekStart && h.Start <= weekEnd) || //the period start is in the week
(h.End >= weekStart && h.End <= weekEnd)) // the period end is in the week
答案 3 :(得分:1)
你应该结合两个运营商,假设:
DateTime firstDayOfTheWeek = GetMyFirstDay();
DateTime lastDayOfTheWeek = GetMyLastDay();
var result = eventsCollection.Where
(x => (x.endDate >= firstDayOfWeek && x.endDate <= lastDayOfTheWeek)
||
(x.startDate <= lastDayOfTheWeek && x.startDate >= firstDayOfTheWeek))
您需要解决3种可能的情况:
你可以基本上减少到:
这当然假设您正在处理正确的数据(即没有事件在它应该结束后开始)
答案 4 :(得分:0)
由于存在一些约束startTime < endTime
和week.Start < week.End
,因此您必须查找具有条件的事件:(startTime <= week.Start AND endTime >= week.Start) OR (startTime >= week.Start AND startTime <= week.End)