C#LINQ/EF在具有值转换的属性上引发无效的强制转换



在我的数据库中,我有一个表对象:

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和double类型之间进行比较,但我怀疑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();

相关内容

  • 没有找到相关文章

最新更新