2012-03-04 32 views

回答

1

喜歡的東西:

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

嗯,有三個選項,我可以馬上想到:

  • 拉動全DateTime回來,然後提取月份和格式化客戶端
  • 使用DateTime.Month從數據庫中拉回月份,然後將其格式化爲客戶端
  • 嘗試獲取格式(conv版爲文本)到數據庫

我個人嘗試第三種選擇上工作 - 這感覺對我來說,這是不太可能的工作,至少在沒有很多的努力。

我懷疑我最好其實剛拉回來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) 
         ... 

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

+0

第二種選擇是好的,如果你想按月過濾,但在選擇第一個選項罰款去+1 – rfcdejong 2012-03-04 14:16:36

+1

@rfcdejong:是的,好點 - 將編輯。 – 2012-03-04 14:22:58

相關問題