如何从 Linq 中的日期时间列获取月份名称到 SQL
本文关键字:取月份 获取 SQL 时间 Linq 日期 | 更新日期: 2023-09-27 18:26:41
我的表中有一列DateTime
。
在 Linq to SQL 查询中,我只需要该字段的月份部分
如何为此编写 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();