Entity Framework 4.0/如何从日期和时间连接字符串
Posted
技术标签:
【中文标题】Entity Framework 4.0/如何从日期和时间连接字符串【英文标题】:Entity Framework 4.0/ How to concatenate string from date and time 【发布时间】:2021-12-26 12:19:55 【问题描述】:我有这张桌子
CREATE TABLE Receipt
(
id INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
idcustom INT NOT NULL,
idstaff INT NOT NULL,
Daypayat DATE NOT NULL,
Timepayat TIME NOT NULL,
total INT NOT NULL
)
我想将 Daypayat 与 Timepayat 连接起来,例如 DateTime (dd/MM/yyyy hh:mm)
【问题讨论】:
那是 SQL,而不是 C#/entity 框架。你能展示一下你到目前为止所做的尝试吗? @PeterSmith 是的,我知道我的意思是使用实体框架在 c# 中连接字符串 2 列 Daypayat、Timepayat 看datetime
格式here。分别格式化日期和时间,然后将这两个字符串连接起来。
【参考方案1】:
首先使用以下方法进行连接并将结果保存在SQL中的特定列中。
select cast(@date+' '+@time as datetime)
或者你可以这样做来转换,
select cast(@date as datetime)+@time
然后在 C# 中使用 Datetime 结构来获取结果。
【讨论】:
【参考方案2】:格式化是一个视图/消费者关注的问题,它不应该是一个领域。实体应该公开 DayPayAt 和 TimePayAt 作为它们各自的类型。 (DateTime 和 DateTime / Timespan)当您查询数据时,将其投影到 ViewModel/DTO,后者可以将这些值组合成 PayAt DateTime,然后让您的视图格式符合您的要求。
所以如果您的实体有:
public DateTime DayPayAt get; set;
public Timespan TimePayAt get; set;
您的查询将是:
var receipt = context.Receipts
.Where(/*conditions...*/)
.Select(x => new
// other fields or related data as needed.
x.Daypayat,
x.Timepayat
).ToList() // Materialize our query...
.Select(x => new ReceiptViewModel
// Copy related data from results...
PayAt = x.DayPayAt.Add(x.Timepayat);
).ToList();
然后在您的视图中,您可以使用您想要的任何自定义或标准格式字符串来格式化“PayAt”。例如,@Model.PayAt.ToString("g")
会为您提供您所在地区的标准短日期/时间格式,或者为特定内容使用自定义格式字符串。
上面的例子做了一个双重投影,一个是从我们的实体中获取感兴趣的原始字段,第二个是投影到视图模型。这可能不是必需的,具体取决于 EF 是否可以执行 DateTime.Add
。 (我不相信)
如果实体中的 Timepayat 映射到 DateTime 字段(即 0000-00-00T14:20:00),那么 PayAt 转换将为:
PayAt = x.DayPayAt.Add(x.Timepayat.TimeOfDay);
如果您想返回实体并处理它,另一种方法是在构成 DateTime 的 PayAt 的 Receipt 实体上使用未映射的属性。该方法的注意事项是,您需要记住不要在 Linq 表达式中引用任何未映射的属性,因为它无法转换为 SQL。
public class Receipt
// Mapped properties...
public DateTime Daypayat get; set;
public TImespan Timepayat get; set;
[NotMapped]
public DateTime PayAt
get return Daypayat.Add(Timepayat);
【讨论】:
以上是关于Entity Framework 4.0/如何从日期和时间连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework 4.0、PoCo 和查找表的导航属性
Entity Framework 6 是不是支持 .NET 4.0?
在 .Net 3.5 应用程序中使用 Entity Framework 4.0 [重复]
ASP.NET MVC 4 + Entity Framework 6 + SQL Compact Edition 4.0 部署无需安装