Как я могу установить пользовательское свойство типа Entity в запросе LINQ to Entities и при этом вернуть IQueryable <T>? - PullRequest
2 голосов
/ 12 июля 2010

У меня есть модель EF4, в которой у меня есть сущность Product, которая имеет отношение один ко многим с сущностью Task (ChildTasks).Я должен получить несколько проектов из БД на основе некоторых пользовательских критериев.Проект имеет одно пользовательское свойство (не связанное ни с одним столбцом) с именем EstimatedProgress, в котором я должен хранить дополнительную информацию о проекте - вычисленный средневзвешенный прогресс каждой дочерней задачи.Проблема в том, что, наконец, я не могу вернуть IEnumerable <Project>, но IQueryable <Project>.Код ниже демонстрирует, чего я хочу достичь (я знаю, что он не компилируется).

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 или, возможно, у некоторых из вас есть обходной путь;) Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 19 сентября 2012

Вы можете объявить класс простой оболочки

public class ProductWithEstimation 
{ 
    public Product Product { get; set; } 
    public double? EstimatedTime { get; set; }
}

и возвращаем IQueryable<ProductWithEstimation> вместо.

0 голосов
/ 12 июля 2010

Самый простой вариант - переместить логику в средство получения пользовательских свойств.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...