2017-08-28 28 views
-1

我的查詢是我想選擇出生日期是系統日期的用戶列表,我在我的控制器中使用了以下條件,但是它給出了一個錯誤。 我想省略一年,並選擇出生日期與系統日期和月份相同的用戶。如何根據日期條件在LINQ查詢中選擇一個列

錯誤:

LINQ實體無法識別方法「System.String的ToString(System.String)」方法,和這種方法不能被翻譯成表達商店。

控制器代碼:

public IEnumerable<string> UserBirthdays { get; set; } 

如何解決這個錯誤,並得到用戶名:

objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => Convert.ToDateTime(u.DOB).ToString("dd-MMM").Equals(DateTime.Now.ToString("dd-MMM"))).Select(u => u.Name).ToList(); 

UserBirthdays在模型定義?

+0

'var dob = DateTime.Now.ToString(「dd-MMM」); objUser.UserBirthdays = dbContext.EmployeeProfiles.Where(u => u.DOB == dob).Select(u => u.Name).ToList();'(但這取決於DOB在db中的含義) –

+1

數據庫中「DOB」的格式是什麼,爲什麼它是一個字符串而不是DateTime? (我假設它是一個'string',否則爲什麼要使用'Convert.ToDateTime()') –

+0

DOB的數據類型是數據庫中的datetime。 –

回答

1

這今天將讓所有的用戶DOB:

如果DOB是DateTime類型:

objUser.UserBirthdays = dbContext.EmployeeProfiles 
          .Where(u => u.DOB.Day == DateTime.Today.Day 
            && u.DOB.Month == DateTime.Today.Month) 
          .Select(u => u.Name).ToList(); 

如果DOB數據類型爲空的DateTime(DateTime?),那麼你需要檢查先將空值轉換爲DateTime

objUser.UserBirthdays = dbContext.EmployeeProfiles 
          .Where(u => u.DOB != null 
            && Convert.ToDateTime(u.DOB).Day == DateTime.Today.Day 
            && Convert.ToDateTime(u.DOB).Month == DateTime.Today.Month) 
          .Select(u => u.Name).ToList(); 
+0

刪除'ToList()'會延遲查詢的執行(不一定是壞的東西,只是一個說明) – yinnonsanders

+0

@yinnonsanders加回來 – adiga

+0

這是行不通的。請建議如何填充與日期和月份相匹配的名稱列表。 –

相關問題