如何从Linq to SQL中的datetime列中获取月份名称?

问题描述:

我在我的表中有一个DateTime列。如何从Linq to SQL中的datetime列中获取月份名称?

在LINQ to SQL查询,我只需要那场

如何编写针对LINQ查询的月份部分?

喜欢的东西:

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

嗯,有三个选项,我可以马上想到:

  • 拉动全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