如何从Linq to SQL中的datetime列中获取月份名称?
答
喜欢的东西:
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)
...
...但在这些情况下,我希望它是数值是重要的,而不是名月份的。
第二种选择是好的,如果你想按月过滤,但在选择第一个选项罚款去+1 – rfcdejong 2012-03-04 14:16:36
@rfcdejong:是的,好点 - 将编辑。 – 2012-03-04 14:22:58