如何从Linq中的datetime列获取Month Name到SQL?

Moh*_*eeq 6 c# linq datetime linq-to-sql

DateTime我的桌子上有一栏.

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

如何编写Linq查询?

Jon*_*eet 6

好吧,我可以立即想到三个选项:

  • 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") });
Run Code Online (Sandbox Code Playgroud)

编辑:如评论中所述,DateTime.Month在服务器端使用它是否真的会影响结果是有意义的,例如

var query = db.Customers.Where(c => c.FirstOrder.Month == 1)
                        ...
Run Code Online (Sandbox Code Playgroud)

...但在这些情况下,我希望它是重要的数值,而不是月份的名称.


Mah*_*mal 1

就像是:

string monthName = dataContext.GetTable<TableName>()
                              .FirstOrDefault(t => t.DateTimeColumn)
                              .ToString("MMM");               
Run Code Online (Sandbox Code Playgroud)