[英]Substring of a DateTime with Linq to Sql extensions
我正在嘗試從我的表中獲取日期列表,其中包含一個名為StartTime的列中的許多DateTime值。 我的前任使用了以下SQL:
SELECT DISTINCT SUBSTRING(CONVERT(VARCHAR(50), StartTime, 120), 1, 10)
這導致表格中每行的“yyyy-MM-dd”格式的明確日期列表。 我正在嘗試通過執行以下操作將此轉換為Linq-to-SQL:
query.Select(o => o.StartTime.ToString("yyyy-MM-dd")).Distinct()
但是,這會導致錯誤“Method'System.String ToString(System.String)'沒有支持的SQL轉換。”
如何使用Linq-to-SQL進行子串/轉換?
謝謝!
您可以通過LINQ to SQL支持的DateTime屬性處理此問題,而不是依賴字符串處理:
var results = query.Select(o => o.StartTime.Date).Distinct();
如果要將其視為字符串,稍后可以使用LINQ to Objects轉換結果:
var stringResults = results.AsEnumerable().Select(d => d.ToString("yyyy-MM-dd"));
我會做:
query.Select(o => o.StartTime.Date)
.Distinct() // Runs on the database
.AsEnumerable() // Convert to local sequence
.Select(date => date.ToString("yyyy-MM-dd")) // Runs on the client
LINQ to SQL支持DateTime.Date
屬性(刪除子日期部分),因此日期格式化以外的所有內容都將在數據庫上運行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.