У меня есть таблица с несколькими записями с датой начала (PlacementDate) и датой окончания (Pulled Date). Я передаю параметры даты начала и конца даты в эту функцию, которая должна возвращать записи, которые пересекают начальную и конечную дату, прошедшие в, а также указать, сколько дней каждая запись пересекает.Linq to SQL - количество дней на перекрестке между диапазонами дат
Получение записей, которые пересекаются легко, получить количество дней пересечения диапазонов дат не так просто ... Вот что я до сих пор:
var query = from d in db.TelemetryDevices
join p in db.DevicePlacements on d.TelemetryDeviceID equals p.TelemetryDeviceID
where d.CompanyID == companyId && d.BillingPlanID == billingPlanId
&& (
(p.PlacementDate <= startDate && (p.PulledDate != null ? p.PulledDate.Value : DateTime.MaxValue) >= endDate)// { start - end }
|| (p.PlacementDate <= startDate && (p.PulledDate != null ? p.PulledDate.Value : DateTime.MaxValue) >= startDate)// { start } end
|| (p.PlacementDate >= startDate && (p.PulledDate != null ? p.PulledDate.Value : DateTime.MaxValue) <= endDate)// start { } end
|| (p.PlacementDate >= startDate && (p.PulledDate != null ? p.PulledDate.Value : DateTime.MaxValue) >= endDate)// start { end }
)
select new DeviceView
{
TelemetryDeviceID = d.TelemetryDeviceID
};
Любые идеи о том, как решить это было бы весьма полезно.
Прежде всего, используйте оператор нулевой Coalesce сократить код: вместо "p.PulledDate = нуль p.PulledDate.Value:? DateTime.MaxValue" использование «p.PulledDate ?? DateTime.MaxValue " – Manu