[ad_1]
拝啓、
LINQ 日時形式を変換する方法を教えてください
例:
2012 年 1 月 26 日火曜日 (または)
2012 年 1 月 26 日、火曜日
解決策を教えてください。
モハン著
解決策 1
YearMonth = r.SomeDateTime.ToString("dddd, MMMM yyyy")
解決策 3
linq は変換、「ToString()」メソッドを知らないため、データを取得するときは次のような enumerable を使用します。
var selectQuery = db.address.asEnumerable() に追加します。
これで、convert または “tostring” メソッドを使用できるようになります。
解決策 4
(time.table のクラス名から t.Date を選択).ToList().Select(d => d.ToString(“yyyy-MM-dd”);
試してみてください……
解決策 5
var selectQuery=from add in db.address select add.myDate.toString("{0:dddd, MMMM d, yyyy}"); selectQuery.Distinct();
これを試して..
よろしく、
ニシャント
解決策 7
場合によっては、サーバー側でフォーマットすると便利です。 1 秒未満の解像度でタイムスタンプを時間単位または日単位のグループにグループ化する例は、次のとおりです。
私のユースケースでは、1 日あたり 700,000 件の新しいレコードを取得します。 したがって、サーバー側ははるかに高速になります。 この場合、250 万件のレコードが 4 日にグループ化されます。
AsEnumerable の適用は機能しますが、最大 40 分 (2500 秒) かかります。 これは、1000/秒を返すことから推定されます。
サーバー側のグループ化には約 0.7 秒かかります。 これは測定されます。
私は非常に遅いリモコンを実行していますが、それがまさに重要な点です。 ホストされたデータベースは常に回線経由で結果を返すため、DB サーバーで集約することで、DB エンジンが構築された目的をローカルで実行できるようになります。
toupper() やすべてのレコードのフォーマットなどの一部の操作は、可能であればローカルで実行する必要があります。 日付をフォーマットする LinqToSQL/EF はそれほど難しくありませんが、結果として得られる SQL は非常に厄介です。
区切り文字の追加は人間のためのものであり、グループ化には必要ありません。 PadLeft() メソッドでさえ、ほとんどの場合は必要ありませんが、これらを使用すると、結果の日時を語彙的に並べ替えたり、読み取ったりすることが容易になります。
この例では、日をグループ化するために、時、分、秒を 00 に設定します。
時間ごとにグループ化するには、コメントを解除します。
let Hour = Date.Hour.ToString().PadLeft(2, '0') //let Hour = "00"
これは簡単で汚い例にすぎません。 これまでで最速のコードではありません。
サーバー側で実行するだけで40秒から取得できます。 1秒未満まで。 それで、今のところは終わりです。
ところで、このスクリプトは私の環境の LinqPad でのみ実行されます。そのため、ニーズに合わせて編集してください。ただし、特定の問題を解決するように私に依頼しないでください。
void Main() { var query = from cat in CATOperations let Date = cat.OperationDateTime let Year = Date.Year.ToString().PadLeft(4, '0') let Month = Date.Month.ToString().PadLeft(2, '0') let Day = Date.Day.ToString().PadLeft(2, '0') //let Hour = Date.Hour.ToString().PadLeft(2, '0') let Hour = "00" //let Minute = Date.Minute.ToString().PadLeft(2, '0') let Minute = "00" //let Second = Date.Second.ToString().PadLeft(2, '0') let Second = "00" let dateGroup = Year + '/' + Month + '/' + Day + " " + Hour + ":" + Minute + ":" + Second where Date > new DateTime(2024, 1, 9) //select new{Date, dateGroup}; group 1 by dateGroup into g orderby g.Key let count = g.Count() select new { g.Key, count }; query.Dump(); }
[ad_2]
コメント