c# - C# LINQ/EF 在具有值转换的属性上抛出无效强制转换
问题描述
在我的数据库中,我有一个表Objects:
public class Objects {
[Key]
public int ID { get; set; }
blah blah blah
public JCal CreationDate { get; set; }
}
属性CreationDate有一个值转换器,如下所示:
var stdJCalConversion = new ValueConverter<JCal, double>(
v => v.Timestamp,
v => new JCal(v));
modelBuilder
.Entity<Objects>()
.Property(e => e.CreationDate )
.HasConversion(stdJCalConversion );
但是当我尝试运行一个简单的 where 子句时,如下所示:
fetch = await Objects.Where(c => c.CreationDate > someDouble).ToListAsync();
我收到以下异常:InvalidCastException:从“System.Double”到“x.Types.JCal”的无效转换。
定义 JCal 的结构具有运算符重载,可以在 JCal 和双精度类型之间进行比较,但我怀疑 LINQ 不能与 EF 不同的 ValueConversions 工作。有没有办法让它工作,或任何解决方法?
解决方案
您也许可以使用表达式,如下所示:
public static Expression<Func<Objects, bool>> IsHigherThanDouble(double someDouble)
{
return (objects) => objects.CreationDate.Timestamp < someDouble;
}
然后你可以这样做:
fetch = await Objects.Where(IsHigherThanDouble(someDouble)).ToListAsync();
推荐阅读
- scala - scala:查找列表中特定元素的数量
- reactjs - 在 React 中创建一个基本循环
- numpy - InterpolatedUnivariateSpline 和 ax.fill_between 产生低 Y 值的意外结果(填充错误区域)
- mysql - 对于许多复选框来说,是多列还是单列位字符串更好
- python - 如何在python中的大文件中搜索二元组时降低时间复杂度?
- scala - 同构类型的 Cats 类型类
- django - 如何获取下载pdf文件的链接?(姜戈)
- ios - 如何解决致命错误:Swift IOS 中的索引超出范围
- r - 将多个 ggplot2 图形与一个共同的 x 轴和不同的 y 轴对齐,每个轴都有不同的 y 轴标签
- c# - DataGridView 添加行在底部显示打乱的行