gpt4 book ai didi

entity-framework - 为什么我不能使用 `TimeSpan` 在 RIA 中转换 `TimeSpan.FromMinutes` ?

转载 作者:行者123 更新时间:2023-12-04 08:32:17 26 4
gpt4 key购买 nike

我使用 POCO 将 RIA 服务与 Entity Framework 相结合。这一切都非常有效(比 LINQ to SQL 好得多)。我遇到的问题是以下代码段:

[Query]
public IQueryable<MyEntity> GetMyEntities()
{
return from myEntity in ObjectContext.MyEntities
where myEntity.Status != "deleted"
select new MyEntity
{
// Other property assignments...

SuchAndSuchTime = TimeSpan.FromMinutes(project.SuchAndSuchTime ?? 0.0),

// Other property assignments...
};
}

这是我的代码版本,为了保护无辜者,更改了名称。这会编译 find 但在运行它时出现以下异常:

Load operation failed for query 'GetMyEntities'. LINQ to Entities does not recognize the method 'System.TimeSpan FromMinutes(Double)' method, and this method cannot be translated into a store expression.

为什么我不能这样做,是否有变通办法?

最佳答案

这里的问题是 CLR TimeSpan 类在 LINQ to Entities 中没有完整的规范映射。这就是您的异常在子句“...无法翻译成存储表达式...”中所指的内容

对于 LINQ 场景,针对 Entity Framework 的查询涉及通过规范函数将某些 CLR 方法映射到基础数据源上的方法。 LINQ to Entities 查询中任何未显式映射到规范函数的方法调用都将导致引发运行时 NotSupportedException 异常。

来源:MSDN

TimeSpan 就是其中之一。

至少有两种解决方案,这些是...

  1. 使用有效的 LINQ to SQL(即,仅限规范方法)语句从数据库中获取完整的结果集;然后使用 LINQ to Objects 过滤返回的结果。 LINQ to Objects 过滤器应包含所有非规范方法,以便您的过滤提供预期的数据子集。

  2. 将非规范方法转移到存储过程(即转换为直接 SQL)并调用存储过程。

第三种解决方案是尝试将非规范表达式包装到域服务类中的私有(private)方法中。这是我在深入了解这个难以捉摸的异常之前所做的。

第四种更隐蔽的方法是 here

关于entity-framework - 为什么我不能使用 `TimeSpan` 在 RIA 中转换 `TimeSpan.FromMinutes` ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8840526/

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