Linq DateTime 格式如何使用?/转换?

编程


尊敬的先生,

帮助我如何转换 LINQ 日期时间格式

例子:

1,2012 年 1 月 26 日,星期二(或)

2,2012 年 1 月 26 日,星期二

给我解决方案吗?

通过莫汉

解决方案1

VB
YearMonth = r.SomeDateTime.ToString("dddd, MMMM yyyy")

解决方案3

linq 不知道转换、“ToString()”方法,因此当您获取数据时,请使用可枚举的方法,例如
var selectQuery = from add in db.address.asEnumerable() ;

那么现在您可以使用转换或“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

服务器端格式化日期时间戳

有时,格式化服务器端很有用。 将具有亚秒分辨率的时间戳分组为小时或天长的组就是一个示例。

在我的用例中,我们每天获得 70 万条新记录。 所以服务器端可以快得多。 在本例中,250 万条记录被分为 4 天。

应用 AsEnumerable 有效,但需要大约 40 分钟(2500 秒)。 这是根据返回 1000/秒推断出来的。

服务器端分组大约需要 0.7 秒。 这是测量的。

我正在运行一个非常慢的遥控器,但这正是重点。 托管数据库始终通过线路返回结果,因此在数据库服务器上聚合允许数据库引擎在本地执行其构建目的。

如果可能的话,一些操作(例如 toupper() 或格式化每条记录)应在本地完成。 LinqToSQL/EF 格式化日期并不难,但生成的 SQL 相当混乱。

添加分隔符是为了人类,分组不需要。 在大多数情况下,甚至不需要 PadLeft() 方法,但它们使生成的日期时间易于词汇排序和阅读。

在此示例中,我将小时、分钟和秒设置为 00,以按天分组。
要按小时分组,请取消注释:

let Hour = Date.Hour.ToString().PadLeft(2, '0')
//let Hour = "00"

这只是一个快速而肮脏的例子。 不是有史以来最快的代码。

只需在服务器端执行此操作即可在 40 秒内获得它。 不到一秒。 所以我现在已经完成了。

顺便说一句,此脚本仅在我的环境中的 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をコピーしました