簡體   English   中英

如何從Linq中的datetime列獲取Month Name到SQL?

[英]How to get Month Name from datetime column in Linq to SQL?

我的表中有一個DateTime列。

在Linq to SQL查詢中,我只需要該字段的Month部分

如何編寫Linq查詢?

好吧,我可以立即想到三個選項:

  • 拉回整個DateTime ,然后提取月份並將其格式化為客戶端
  • 使用DateTime.Month從數據庫中提取月份,然后將其格式化為客戶端
  • 嘗試獲取格式(轉換為文本)以在數據庫上工作

就個人而言,我不會嘗試第三種選擇 - 我覺得它不太可能工作,至少沒有多少努力。

我懷疑我實際上只是將DateTime拉回來,並做客戶端的一切 這樣做非常容易,而且必然會起作用。 我希望DateTime.Month 可能會工作,但你不會被節省非常多的網絡帶寬,而且你會得到服務器做的工作,這可能只是為方便客戶做的。

請注意,如果您仍希望將結果作為查詢,則可以使用AsEnumerable強制查詢的其余部分在客戶端完成。 例如:

var query = db.Customers
              .Where(c => c.OrderCount > 500) // Or whatever query you want
              .Select(c => new { c.Name, c.FirstOrder })
              .AsEnumerable() // Do the rest of the query on the client
              .Select(c => new { c.Name, c.Month = c.FirstOrder.ToString("MMM") });

編輯:如評論中所述,如果它實際上會影響結果 ,則在服務器端使用DateTime.Month是有意義的,例如

var query = db.Customers.Where(c => c.FirstOrder.Month == 1)
                        ...

...但在這些情況下,我希望它是重要的數值,而不是月份的名稱

就像是:

string monthName = dataContext.GetTable<TableName>()
                              .FirstOrDefault(t => t.DateTimeColumn)
                              .ToString("MMM");               

您需要使用ToList()將表轉換為Enumerable類型,因為您不能在查詢類型上使用ToString()

var result = from sales in SalesOrderHeaders.ToList()
    select new {
        Sales_Order_ID = sales.SalesOrderID,
        Territory_ID = sales.TerritoryID,
        Month = sales.OrderDate.ToString("MMMM"),
        Year = sales.OrderDate.Year
};
result.Dump();

暫無
暫無

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

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