亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#、ASP.Net Core 和 Linq:處理空日期

C#、ASP.Net Core 和 Linq:處理空日期

C#
白衣染霜花 2022-12-24 12:27:01
我在 Visual Studio 2019、C#、ASP.Net Core 中制作多連接查詢時遇到問題。我有兩張桌子:sessions(    id          int primary key,    start_id    int not null,   // foreign key to "start event" event.id    end_id      int             // foreign key to "end event" event.id)events(    id  int primary key,    username    varchar(32) not null,    deviceName  varchar(64) not null,    eventName   varchar(8) not null,    eventDate   datetime not null)登錄/注銷等成對事件被放入事件表中。表的INSERT 觸發器events處理表的管理sessions。對于這個問題,假設會話表可能如下所示: id | start_id | end_id----+----------+--------  1 | 1        | null  2 | 2        | 3events: id | userName | deviceName | eventName | eventDate----+----------+------------+-----------+-----------  1 | alice    | moose      | login     | 2019-03-11 14:02:54  2 | bob      | juno       | login     | 2019-03-11 15:11:08  3 | bob      | juno       | logout    | 2019-03-11 17:18:22在 SSMS 中,我可以將我想要的查詢編寫為:SELECT    sessions.id,    StartEvents.userName,    StartEvents.deviceName,    StartEvents.eventDate as startDate,    ISNULL(EndEvents.eventDate, GETDATE()) as endDateFROM sessionsJOIN events StartEvents    ON sessions.start_id = StartEvents.idLEFT JOIN events EndEvents    ON sessions.end_id = EndEvents.idWHERE StartEvents.eventDate >= @myStart      AND ISNULL(EndEvents.eventDate, GETDATE()) <= @myEnd我在 C# 中試過這個:var result = (    from sessions in db.Sessions    join StartEvents in db.Events        on sessions.Start_id equals StartEvents.Id    join EndEventsTmp in db.Events        on sessions.End_id equals EndEventsTmp.Id into EndEventsTmp2    from EndEvents in EndEventsTmp2.DefaultIfEmpty()    where StartEvents.Machine.Trim().ToUpper().Equals(machine.Trim().ToUpper())          & StartEvents.eventDate >= myStart          & (EndEvents.eventDate ?? DateTime.Now) <= myEnd    orderby StartEvents.Date    }    ).ToList();有人告訴我“'??'的左操作數” 應該是引用或可為空的類型”。問題是基礎字段(事件中的“eventDate”)不能為空。我該如何處理?
查看完整描述

1 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

eventDate永遠不會為空,因為正如您所說,它不可為空。您要檢查的可空對象是EndEvents(因為您正在對該實體進行左連接)。您可以在此處使用null 條件運算符語法:

EndEvents?.eventDate ?? DateTime.Now

在為 nullDateTime.Now的情況下,這將落入右側 ( )。EndEvents


查看完整回答
反對 回復 2022-12-24
  • 1 回答
  • 0 關注
  • 83 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號