Linq to EntitiesでのDatetimeタイプ変換


JavaScriptSerializerを使用してAdo.NetEntity FrameworkのエンティティをJSONに変換します.ただし、JavaScriptSerializerは、Datetimeタイプをシーケンス化する処理に特別なものがあります.
DateTime time = new DateTime(0x7b2, 1, 1, 0, 0, 0, DateTimeKind.Utc);
DateTime dt=(DateTime)obj ;
return  string.Format(" new Date({0}) ", (long) ((dt.ToUniversalTime().Ticks - time.Ticks) / 0x2710L))
は、通常の時間フォーマットではなく、「/Date(1271729248060)/」のような文字列を生成します.この方法はグローバル化とajax伝送量の減少に関する考慮があるが,多くのローカライズアプリケーションでは,通常の時間フォーマット文字列を伝達するだけでよい.Linq to EntitiesではToString()などの変換はサポートされていませんが、AsEnumerable()を使用してLinq to Entitiesの結果をIEnumerableに変換し、ToString()メソッドを使用して時間フィールドをStringに変換することができます.
var list = ctx.UserInfo.Select(u => new { u.Id, u.Guid, u.Name, u.CreateOn }).AsEnumerable().Select(u => new { 
    Id = u.Id, Guid = u.Guid, Name = u.Name, CreateOn = u.CreateOn.ToString()
});

JavaScriptSerializer se = new JavaScriptSerializer();
Response.Write(se.Serialize(list));