我有一个EF4模型,其中有与Task实体(ChildTasks)具有一对多关系的Product实体。我必须根据一些用户标准从db中获取一些项目。该项目有一个名为EstimatedProgress的定制属性(不与任何列关联),我必须存储有关Project的附加信息 - 每个子任务的计算加权平均进度。问题是,最后我不能返回IEnumerable <Project>
但IQueryable <Project>
。下面的代码演示了我想实现的目标(我知道它不能编译)。如何在LINQ to Entities查询中设置实体类型的自定义属性,并返回IQueryable <T>?
var q = from p in ObjectContext.ProjectSet.Include("ProjectBase")
where p.ProjectBase.IsTemplate == false
from ct in p.ProjectBase.ChildTasks
where ct.Progress != null
&& ct.EstimatedTime != null
group ct by ct.prjProjectBase.Project into g
select new {
Project = g.Key,
EstimatedProgress = g.Sum(oo => oo.Progress.Value * oo.EstimatedTime.Value)
/g.Sum(oo => oo.EstimatedTime.Value),
};
var sortedQ = q.OrderByDescending(o => o.Project.ProjectBase.Status)
.ThenBy(o => o.Project.ProjectBase.Name);
// this is where I want to return IQueryable<Project>
// where each project has set custom property EstimatedProgress
return sortedQ.Select(o =>
{
o.Project.EstimatedTime = o.EstimatedProgress;
return o.Project;
});
的问题是:是否有可能做类似的东西与EF4 LINQ查询或者一些你有一个解决办法;)在此先感谢。
感谢您的回答SLaks。不幸的是,这不是一个选项。在定义它之后,如果我可以使用我的IQueryable,Getter就没问题了(而且它不会是导致效率低下的最佳解决方案 - 一个数据库调用结果中的每个项目)。我写关于IQueryable的原因是我使用Silverlight + WCF RIA Services,而在客户端我想在datagrid中使用分页(并且只有服务器端的IQueryable完全支持它)。任何其他想法? – wlf84k 2010-07-12 21:46:45