【发布时间】:2012-03-08 19:19:02
【问题描述】:
这是一个基于名为Task 的 Poco 类的简单项目:
class Program
{
static void Main(string[] args)
{
using (MyDbContext ctx = new MyDbContext())
{
// first query
DateTime compareDate = DateTime.Now + TimeSpan.FromDays(3);
var res = ctx.Tasks.Where(t => t.LastUpdate < compareDate).ToList();
// second query
res = ctx.Tasks.Where(t => t.ShouldUpdate).ToList();
}
}
}
public class MyDbContext : DbContext
{
public DbSet<Task> Tasks { get; set; }
}
public class Task
{
public int ID { get; set; }
public DateTime LastUpdate { get; set; }
public bool ShouldUpdate
{
get
{
return LastUpdate < DateTime.Now + TimeSpan.FromDays(3);
}
}
}
我想做的是查询上下文dbset,包括在where子句中的ShouldUpdate派生属性。
“第一个查询工作正常”(我不能把它写在一行但没关系)。
如您所知,我们在“第二个查询”中收到NotSupportedException,并带有以下消息:
LINQ to Entities 不支持指定的类型成员“ShouldUpdate”。仅支持初始化器、实体成员和实体导航属性。
没错,我可以理解为什么会这样,但是我需要将派生信息封装在 Task 对象中,这样我就可以在网格中显示该属性或在其他任何地方使用它,而无需重复其背后的逻辑.
有没有一种聪明的技术可以做到这一点?
注意:ShouldUplate 属性的技术名称是什么?衍生的?计算?计算?
【问题讨论】:
标签: c# linq entity-framework linq-to-entities poco