【解決方法】Linq DateTime 形式の使用方法/変換?


拝啓、

LINQ 日時形式を変換する方法を教えてください

例:

2012 年 1 月 26 日火曜日 (または)

2012 年 1 月 26 日、火曜日

解決策を教えてください。

モハン著

解決策 1

VB
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

C#
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();
}

コメント

タイトルとURLをコピーしました