具有Linq到Sql扩展的DateTime的子串

Pau*_*aul 5 c# linq sql-server linq-to-sql

我正在尝试从我的表中获取日期列表,其中包含一个名为StartTime的列中的许多DateTime值.我的前任使用了以下SQL:

SELECT DISTINCT SUBSTRING(CONVERT(VARCHAR(50), StartTime, 120), 1, 10)
Run Code Online (Sandbox Code Playgroud)

这导致表格中每行的"yyyy-MM-dd"格式的明确日期列表.我正在尝试通过执行以下操作将此转换为Linq-to-SQL:

query.Select(o => o.StartTime.ToString("yyyy-MM-dd")).Distinct()
Run Code Online (Sandbox Code Playgroud)

但是,这会导致错误"Method'System.String ToString(System.String)'没有支持的SQL转换."

如何使用Linq-to-SQL进行子串/转换?

谢谢!

Ree*_*sey 6

您可以通过LINQ to SQL支持的DateTime属性处理此问题,而不是依赖字符串处理:

var results = query.Select(o => o.StartTime.Date).Distinct();
Run Code Online (Sandbox Code Playgroud)

如果要将其视为字符串,稍后可以使用LINQ to Objects转换结果:

var stringResults = results.AsEnumerable().Select(d => d.ToString("yyyy-MM-dd"));
Run Code Online (Sandbox Code Playgroud)