【发布时间】:2011-04-23 19:16:24
【问题描述】:
使用以下代码(简化)时,出现错误
“无法将类型 'System.DateTime' 转换为类型 'System.Object'。LINQ to Entities 仅支持转换实体数据模型原始类型。”
在返回语句所在的行:
public MyRepository<Post>
{
public Expression<Func<Post, object>> DefaultOrder;
public MyRepository()
{
DefaultOrder = p => p.PublishedOn;
}
public IQueryable<Post> All()
{
var entities = new MyDbContext().Set<Post>();
return entities.OrderByDescending(DefaultOrder);
}
}
我在 db4o/db4o.Linq 中使用了相同的代码,而不是 Entity Framework,没有问题。
所以这里是我的问题:
- 为什么会出现这个错误?
- 是否有替代解决方案,可以让我以与现在相同(相似)的方式定义我的 DefaultOrder?
编辑:
找到了一个适合我的解决方案,用排序方法替换了默认的排序表达式:
public MyRepository<T>
{
public Func<IQueryable<T>, IOrderedQueryable<T>> DefaultOrderMethod;
public MyRepository()
{
DefaultOrderMethod = o => o.OrderBy(x => x.PublishedOn);
}
public IQueryable<T> All()
{
var entities = new MyDbContext().Set<T>();
return DefaultOrderMethod(entities);
}
}
【问题讨论】:
-
您是否尝试过提前进行选角? (
DefaultOrder= p=> (object) p.PublishedOn;) -
好主意! - 但不幸的是不起作用...
标签: entity-framework c#-4.0 linq-to-entities sql-order-by