iT邦幫忙

0

Linq 判斷類型可能為null的問題

這邊設置的物件如下

    public class BannerModel
    {
        public Int64? BannerID { get; set; }
        public String ItemID { get; set; }
        public bool? ActiveFlag { get; set; }
        public DateTime? CreDate { get; set; }
        public DateTime? UpdDate { get; set; }

    }

Linq去下條件判斷如下

var N = bannerList.Where(q => q.StartDate.Date <= DateTime.Now.Date).OrderByDescending(q => q.SortNo).FirstOrDefault();

這邊會顯示錯誤,因為datetime?的類型可能為null所以不可使用datetime類型的方法
想請教一下各位前輩
這種狀況有沒有在可能為null類型前面加一個符號告知程式這個資料一定不為nul之類的語法?
或是有其他方式可以處理這類方法呢

優悠 iT邦新手 4 級 ‧ 2019-01-30 09:31:37 檢舉
直接加個WHERE,會不會比較好?
&& q.StartDate != null
像上面那句
這樣呢? 試試看
q.StartDate?.Date <= DateTime.Now.Date

1 個回答

1
暐翰
iT邦大師 1 級 ‧ 2019-01-24 13:37:49
最佳解答

這種狀況有沒有在可能為null類型前面加一個符號告知程式這個資料一定不為nul之類的語法?

1.去掉?
2.強轉型(DateTime)

看更多先前的回應...收起先前的回應...
hugo8319 iT邦新手 5 級 ‧ 2019-01-24 13:41:38 檢舉

第一種方式因為物件有其他用途所以暫不考慮
目前也是先暫定用第二種做法

var N = bannerList.Where(q => ((DateTime)q.StartDate).Date <= DateTime.Now.Date).OrderByDescending(q => q.SortNo).FirstOrDefault();

但不知道有沒有其他更好的方法/images/emoticon/emoticon02.gif

暐翰 iT邦大師 1 級 ‧ 2019-01-24 14:03:54 檢舉

目前沒想到其他方式

fillano iT邦超人 1 級 ‧ 2019-01-24 15:13:04 檢舉

頂多就是用三元運算先排除null,然後強制轉型,意思是一樣的。

米歐 iT邦新手 4 級 ‧ 2019-01-25 11:50:42 檢舉

q.StartDate.HasValue && q.StartDate.Value.Date <= DateTime.Now.Date
這樣呢?
如果一定不為 Null 也不用前面的判斷了

我要發表回答

立即登入回答