假设我有一个实体:
public class Event
{
...
public DateTime At { get; set; }
}
以及模型对象:
public class Something
{
...
public Date At { get; set; }
}
其中Date是一个自定义类型,可以从DateTime隐式转换:
public struct Date
{
public Date(DateTime value)
{
...
}
...
public static implicit operator Date(DateTime value)
{
return new Date(value);
}
}
我尝试做的是将数据从数据库中提取到模型中:
var events = db.Events
.Select(x => new Something
{
...
At = x.At,
})
.ToList();
当然,这是失败的,但有以下例外:
无法转换类型&System;日期时间'输入' SMG.Web.Date'。 LINQ to Entities仅支持转换EDM原语或枚举类型。
是的,我知道我可以借助一些临时对象实现我需要的东西,将DateTime值实现到内存中,然后将其转换为我的自定义类型。但是,如果我不想使用这种策略,并希望一步到位,那该怎么办呢。
问题是:有没有办法教LINQ到实体如何在现实的这一面处理我的自定义日期?
答案 0 :(得分:1)
你的演员阵容是错误的。将其改写为:
public struct Date
{
public Date(DateTime value)
{
DateTimeValue = value;
}
// Or whatever your field or property is called
public DateTime DateTimeValue { get; }
public static implicit operator DateTime(Date date)
{
return date.DateTimeValue;
}
}
然后EF应该让你在表达式中使用它。这种方法不适用于代码优先的EF。