当前位置: 首页 > 编程语言 > C#

C#学习教程-formatdateinlinqqueryresult分享

时间:2023-04-10 21:24:22 C#

formatdateinlinqqueryresult以下linqtoentities查询结果如下:publicclassUserCountResult{publicDateTime?日期{得到;放;}//**这应该是字符串吗?**publicintusers{get;放;}publicintvisits{get;放;}}publicJsonResultgetActiveUserCount2(stringfrom="",stringto=""){varquery=fromsindb.UserActionsgroupsbyEntityFunctions.TruncateTime(s.Date)intogselectnewUserCountResult{date=g.Key,//不能在这里使用.toString("dd.MM.yyyy")users=g.Select(x=>x.User).Distinct().Count(),visits=g.Where(x=>x.Category=="online").Select(x=>x.Category).Count()};返回Json(查询,JsonRequestBehavior.AllowGet);}结果:[{"date":"/Date(1383433200000)/","users":21,"visits":47},{"date":"/Date(1383519600000)/","users":91,"visits":236}]而不是像/Date(1383433200000)/这样的日期,我需要一个格式为"dd.MM.yyyy"的日期,例如[{"date":"29.11.2013","users":21,"visits":47},{"date":"30.11.2013","users":91,"visits":236}]我发现无法更改查询中的格式,我不知道该怎么做。我什至不明白为什么g.Key可以为空...感谢您的任何输入!g.Key为空,因为它是EntityFunctions.TruncateTimehttp://msdn.microsoft.com/en-us/library/dd395596.aspx的签名。要从Linqtoentities退出,您可以按原样保留查询,并在事后投影它:returnJson(query.AsEnumerable().Select(r=>new{date=r.date.GetValueOrDefault().ToString("dd.MM.yyyy"),users=r.users,visits=r.visits}),JsonRequestBehavior.AllowGet);它不是很漂亮,但它是LinqtoEntities为您服务的。假设您使用JSON.NET作为JSON序列化程序,您可以将JsonConverterAttribute应用于日期属性以指定自定义转换器。[JsonConverter(typeof(MyDateConverter))]公共日期时间?日期{得到;放;您可以使用DateTimeConverterBase类作为转换器的基类。这是MyDateConverter的可能实现:classCustomDateTimeConverter:DateTimeConverterBase{privateconststringFormat="dd.MM.yyyy";publicoverridevoidWriteJson(JsonWriterwriter,objectvalue,JsonSerializerserializer){DateTimed=(DateTime)value;字符串s=d.ToString(格式);writer.WriteValue(s);}publicoverrideobjectReadJson(JsonReaderreader,TypeobjectType,objectexistingValue,JsonSerializerserializer){if(s==null)returnnull;字符串s=(字符串)reader.Value;返回DateTime.ParseExact(s,Format,null);另一种选择是从序列化中排除日期属性(使用JsonIgnoreAttribute)并添加另一个可以转换为所需格式的String类型的属性。下面是这个解决方案的实现:publicclassUserCountResult{[JsonIgnore]publicDateTime?日期{得到;放;}[JsonProperty("date")]publicstringDateAsString{get{返回日期!=null?date.Value.ToString("dd.MM.yyyy"):null;}设置{date=string.IsNullOrEmpty(value)?默认(日期时间?):DateTime.ParseExact(值,“dd.MM.yyyy”,空);}}publicintusers{get;放;}publicintvisits{get;放;像这样的东西应该工作:date=newDate(parseInt(g.Key.substr(6)));substr将拉出"/Date("字符串,parseInt将只拉取整数,Date将为您提供一个新的日期对象。编辑:刚刚找到支持此答案的SO问题。如何格式化MicrosoftJSON日期?以上是C#学习教程:linq查询结果格式的日期分享的所有内容,如果对你有用,需要进一步了解C#学习教程,希望大家多多关注,本文收藏来自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处: