if (!String.IsNullOrEmpty(Year)) { //第一種方式 var y = Convert.ToInt32(Year); pInfo = pInfo.Where(p => p.startTenderDate_T.Value.Year == y); //第二種方式 pInfo = pInfo.Where(p => p.startTenderDate_T.Value.Year == Convert.ToInt32(Year)); } 倆種方式的目的是一樣的 都是為了篩選日期 為Year的數據 但是第一種可以識別 第二種方式是 識別不了的(會報LINQ to Entities 不識別方法“Int32 ToInt32(System.String) 錯誤) 原因在於第二種的linq表達式中無法識別convert方法. 因為where裡面不能調用這種convert等C#方法 要麼在外面轉好了int類型添加進去 tostring等方法也不能放到where裡面調用 因為他要解析lamda表達式 而不是去解析C#的方法 你要了解這個 就必須深入了解lambda表達式的解析