Приведение результата запроса EF к расширенному типу с расширенным свойством, взятым из запроса EF - PullRequest
0 голосов
/ 30 октября 2011

У меня есть объект Tag:

public class Tag
{
    public int TagID { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Job> Jobs { get; set; }

    public Tag()
    {
        Jobs = new HashSet<Job>();
    }
}

и расширенный:

public class RecentTag : Tag
{
    public int Count { get; set; }
}

... и я пытаюсь получить список объектов RecentTag с Count из запроса, добавленного к каждому объекту:

public IEnumerable<RecentTag> GetRecentTags(int numberofdays)
{
    var tags = Jobs
        .Where(j => j.DatePosted > DateTime.Now.AddDays(-(numberofdays)))
        .SelectMany(j => j.Tags)
        .GroupBy(t => t, (k, g) => new
        {
            RecentTag = k,
            Count = g.Count()
        })
        .OrderByDescending(g => g.Count);

    // return RecentTags { TagID, Name, Count, Jobs }
}

Итак, как мне привести результаты запроса к типу RecentTag и вернуть список расширенных объектов?

Любая помощь будет оценена. Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2011

Я закончил тем, что сделал:

public IEnumerable<RecentTag> GetRecentTags(int numberofdays)
{
    DateTime startdate = DateTime.Now.AddDays(-(numberofdays));

    IEnumerable<RecentTag> tags = Jobs
        .Where(j => j.DatePosted > startdate) // Can't use DateTime.Now.AddDays in Entity query apparently
        .SelectMany(j => j.Tags)
        .GroupBy(t => t, (k, g) => new RecentTag
        {
            TagID = k.TagID,
            Name = k.Name,
            Count = g.Count()
        })
        .OrderByDescending(g => g.Count)
        .Select(a => a);

    return tags;
}
0 голосов
/ 30 октября 2011

если Jobs на самом деле является коллекцией тегов, а они на самом деле являются объектами RecentTag, тогда вы можете просто использовать метод Cast.вам нужно проецировать в объекты RecentTags ..

var rtags = tags.Select(x => new RecentTags() { // assign the members });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...