これにはSqlFunctions
は必要ありません。あなたはこれがあなたにSqlFunctions.DatePart
に似月の整数値を、与え
test1 = e.Date.Month
使用することができます(実際には、それがSQLのDATEPART
機能に翻訳されています)。先頭にゼロが付いた文字列に直接入力することはできません。なぜなら、要求されたToString
のオーバーロードをサポートしていないからです。
context.Data.Select(e => e.Date.Month)
.AsEnumerable().Select(s => s.ToString("00"))
これを行うにはEFを強制的にかなり不自然な方法があります:あなたは、メモリ内にそれを行う必要があるでしょう
from t in Data
let d = t.Date.Month.ToString()
let d2 = d.Length == 1 ? "0" + d : d
select d2
しかし、あなたが生成されたSQLをチェックする必要があります。これはd2
を選択するために生成されるものです:
CASE WHEN (1 = (CAST(LEN(CASE WHEN (DATEPART (month, [c].[Date]) IS NULL) THEN N'' ELSE CAST(DATEPART (month, [c].[Date]) AS nvarchar(max)) END) AS int))) THEN N'0' + CASE WHEN (CASE WHEN (DATEPART (month, [c].[Date]) IS NULL) THEN N'' ELSE CAST(DATEPART (month, [c].[Date]) AS nvarchar(max)) END IS NULL) THEN N'' WHEN (DATEPART (month, [c].[Date]) IS NULL) THEN N'' ELSE CAST(DATEPART (month, [c].[Date]) AS nvarchar(max)) END WHEN (DATEPART (month, [c].[Date]) IS NULL) THEN N'' ELSE CAST(DATEPART (month, [c].[Date]) AS nvarchar(max)) END AS [C1]
(通常、私は、これは改行を追加することによって、より見やすくするために試してみたが、今、私は唯一のポイントを作りたいです)。
これはクエリオプティマイザの実際の問題である可能性がありますので、慎重に使用することはありません。
Hehe、nice。私はいつもフォーマットとデータの問題を分けようとするので、私はこの分野に精通していないと思います。 –