gpt4 book ai didi

c# - 仅比较 Entity Framework 6 中日期时间的时间与 odp.net Oracle 12c

转载 作者:太空狗 更新时间:2023-10-29 17:56:49 24 4
gpt4 key购买 nike

我正在使用带有 Oracle 和 Sql 的 Entity Framework 6。 Timespan 数据类型不适用于 oracle。所以我将数据类型更改为日期时间。现在我只想将日期时间中的时间与 Linq 查询进行比较。前任。

var db0010016 = _idb0010016Rep.GetAll().Where(e => e.ExecutionTime.TimeOfDay == viewmodel.ExecutionTime).FirstOrDefault();

在上面的示例中,e.ExecutionTime 是日期时间,viewmodel.ExecutionTime 是时间跨度。我正在使用 timeofday 函数将其转换为时间跨度

上面的查询执行失败所以我使用了 DbFunctions.CreateTime() 函数

var db0010016 = _idb0010016Rep.FindBy(e => DbFunctions.CreateTime(e.ExecutionTime.Hour, e.ExecutionTime.Minute, e.ExecutionTime.Second) == exetime).FirstOrDefault();

上面的 ex exetime 是时间跨度。我仍然低于错误

{"Invalid parameter binding\r\nParameter name: ParameterName"}

最佳答案

由于 oracle 的日期和时间问题,我们只使用字符串:

using(MyDbContext ctx = new MyDbContext())
{
TimeSpan myTime = new TimeSpan(12, 00, 00);
string myTimeString = myTime.ToString("hh':'mm':'ss");
List<ExecutionObjects> tmp = ctx.ExecutionObjects.Where(a => a.ExecutionTime.EndsWith(myTimeString)).ToList();

// Access field in source with seperated DateTime-property.
tmp.ForEach(e => Console.WriteLine(e.ExecutionTimeDateTime.ToShortDateString()));
}

在源代码中你可以添加一个 DateTime-parsing-property:

public class ExecutionObject
{
[Column("ColExecutionTime")]
public string ExecutionTime { get; set; }
[NotMapped]
public DateTime ExecutionTimeDateTime {
get
{
return DateTime.ParseExact(this.ExecutionTime, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
}
set
{
this.ExecutionTime = value.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}

不是最漂亮的版本,但可以工作。

这是 DbFunctions 中基于 Oracle 的问题。如果您激活 sql-log,您会看到使用了未知的函数“CREATETIME()”。

激活sql日志:ctx.Database.Log = Console.WriteLine;

日志将如下所示:

SELECT *
FROM "ExecutionTimes" "Extent1"
WHERE ((((CREATETIME (EXTRACT (HOUR FROM (CAST (
[...]

关于c# - 仅比较 Entity Framework 6 中日期时间的时间与 odp.net Oracle 12c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47136045/

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