linq максимальная и минимальная дата - PullRequest
0 голосов
/ 14 июля 2020

У меня возникли проблемы при переносе этого SQL SP в оператор linq. sql logi c - это базовая c, чтобы получить минимальную и максимальную дату начала, и если они равны, используйте значение минимальной даты для даты встречи. MeetingDate - это строка, поэтому я бы набросил ее MM / dd / yyyy. Если они не равны, объедините вместе min StartDate и max StartDate.

LINQ
    var Meeting = (from m in db.Meetings
    join md in db.MeetingDates on m.MeetingId equals md.MeetingId
    join mf in db.MeetingFiles on m.MeetingId equals mf.MeetingId
    join fm in db.FileManagers on mf.FileManagerId equals fm.FileManagerId
    join vwGP in db.vwGuidelinePanels on m.GroupId equals vwGP.GroupId
    where mf.FileCategoryItemDictionaryId == 755
    select new Model.Meeting
    {
    MeetingId = m.MeetingId,
    GroupId = m.GroupId,
    MeetingDate =  max(md.StartDate) == min(md.StartDate)? min(md.StartDate)
    min(md.StartDate) + ' - ' + max(md.StartDate)
    }).ToList();


SQL
    case 
        when Convert(varchar(10),min(md.StartDate),101)=Convert(varchar(10),max(md.StartDate),101) 
        then Convert(varchar(10),min(md.StartDate),101) 
    else 
    Convert(varchar(10),min(md.StartDate),101)+' - '+Convert(varchar(10),max(md.StartDate),101) end

output

04/15/2010
05/06/2010
05/12/2010
06/13/2010 - 06/16/2010
06/16/2010 - 06/19/2010

с использованием max и min возникает ошибка времени выполнения

введите описание изображения здесь

1 Ответ

2 голосов
/ 14 июля 2020

Одна проблема: min(md.StartDate) будет типом DateTime, а вычитание min(md.StartDate) + ' - ' + max(md.StartDate) будет типом TimeSpan. Если вы хотите, чтобы результат был таким, каким вы его видите, тогда преобразование в string, вероятно, будет лучшим выбором. Пример ниже. Я обновил свой ответ, чтобы использовать правильный синтаксис LINQ. И снова это не проверено.

MeetingDate = md.StartDate.Max() == md.StartDate.Min()? md.StartDate.Min().ToString("MM/dd/yyyy") : string.Format("{0: MM/dd/yyyy} - {1: MM/dd/yyyy}", md.StartDate.Min(), md.StartDate.Max());
...