gpt4 book ai didi

linq - 为什么我不能在 LinQ 查询中将可为空的 DateTime 转换为字符串?

转载 作者:行者123 更新时间:2023-12-03 23:17:25 25 4
gpt4 key购买 nike

我正在尝试获取 DateTime 值,如果它不为空,则返回短时间字符串。我的查询如下所示:
(TimeIn 不是 NULLABLE,而 TimeOut 是 NULLABLE)

    var times = from t in db.TimePostings
where t.MemberID == member.MemberID
select new
{
Date = t.TimeIn.ToShortDateString(),
TimeIn = t.TimeIn.ToShortTimeString(),
TimeOut = t.TimeOut.HasValue ? t.TimeOut.Value.ToShortTimeString() : "-------"
};
gvTimePostings.DataSource = times;
gvTimePostings.DataBind();

但是当我尝试使用错误进行数据绑定(bind)时,这会失败:

Could not translate expression 'Table(TimePosting).Where(t => (t.MemberID == Invoke(value(System.Func1[System.String])))).Select(t
=> new <>f__AnonymousType8
4(Date = t.TimeIn.ToShortDateString(), TimeIn = t.TimeIn.ToShortTimeString(), TimeOut = IIF(t.TimeOut.HasValue, (t.TimeOut ?? Invoke(value(System.Func`1[System.DateTime]))).ToShortTimeString(), "-------"), Hours = ""))' into SQL and could not treat it as a local expression.



如果我尝试使用,我也会收到类似的错误:
TimeOut = t.TimeOut.HasValue ? Convert.ToDateTime(t.TimeOut).ToShortTimeString() : "-------"

但是,如果我将 TimeOut 属性更改为:
TimeOut = t.TimeOut.HasValue ? t.TimeOut.ToString() : "-------",

它工作正常,但没有像我想要的那样格式化时间(shortTimeString)。

那是怎么回事?

最佳答案

正如其他人所说,问题在于尝试转换 ToShortDateString等到SQL。幸运的是,这很容易解决:使用 SQL 获取数据,然后在 .NET 中对其进行格式化:

var timesFromDb = from t in db.TimePostings
where t.MemberID == member.MemberID
select new { t.TimeIn, t.TimeOut };

var times = from t in timesFromDb.AsEnumerable()
select new
{
Date = t.TimeIn.ToShortDateString(),
TimeIn = t.TimeIn.ToShortTimeString(),
TimeOut = t.TimeOut.HasValue
? t.TimeOut.Value.ToShortTimeString()
: "-------"
};

调用 AsEnumerable()这里的基本意思是,“停止尝试使用 SQL 处理查询;在 LINQ to Objects 中完成剩下的工作”。

关于linq - 为什么我不能在 LinQ 查询中将可为空的 DateTime 转换为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com