簡體   English   中英

linq 最大和最小日期

[英]linq max and min date

我在將此 SQL SP 移植到 linq 語句時遇到了一些問題。 sql 邏輯是獲取最小和最大 StartDate 的基本邏輯,如果它們相等,則使用 MeetingDate 的最小日期值。 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

使用最大值和最小值存在運行時錯誤

在此處輸入圖像描述

一個問題是min(md.StartDate)將是DateTime類型,而min(md.StartDate) + ' - ' + max(md.StartDate)的減法將是TimeSpan類型。 如果您想要 output 如何擁有它,那么轉換為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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM