2015-08-02 2 views
2

Как это могло быть сделано?Как отсортировать/упорядочить по полю вложенного объекта?

context.Subscriptions 
.Include("TvShow.News") 
.Include("User") 
.Where(s => s.UserId == userId) 
.OrderByDescending(t => t.TvShow.News.CreatedOnDatetime) 
.ToList(); 

OrderByDescending не работает в этом случае, я положил его там просто для облегчения понимания проблемы.

+1

Если вы ожидаете, что '' TvShow.News' будет сортироваться в каждой подписке ', нет, вы не можете сделать это с помощью 'Include'. –

+0

Есть ли другой способ сделать это с помощью «Entity Framework»? –

+1

Не из коробки. См. [This] (http://stackoverflow.com/a/26473557/861716). –

ответ

0

я, наконец, получил его на работу с этим запутанным кодом:

// NASTY NASTY ENTITY FRAMEWORK 
var anonymousObjects = context.Subscriptions 
    .Where(c => c.UserId == userId) 
    .Select(s => new 
    { 
     SubscriptionId = s.Id, 
     TvShowId = s.TvShowId, 
     TvShow = s.TvShow, 
     TvShowNews = s.TvShow.News.OrderByDescending(n => n.CreatedOnDatetime), 
     UserId = s.UserId, 
     User = s.User 
    }); 

anonymousObjects = anonymousObjects.OrderByDescending(x => x.TvShowNews.Max(n => n.CreatedOnDatetime)); 
var subscriptions = new List<Subscription>(); 
foreach (var oneAnonymousObject in anonymousObjects) 
{ 
    var subscription = new Subscription 
    { 
     Id = oneAnonymousObject.SubscriptionId, 
     TvShowId = oneAnonymousObject.TvShowId, 
     UserId = oneAnonymousObject.UserId, 
     TvShow = new TvShow 
     { 
      Id = oneAnonymousObject.TvShow.Id, 
      Title = oneAnonymousObject.TvShow.Title, 
      CreatedOnDatetime = oneAnonymousObject.TvShow.CreatedOnDatetime, 
      IsPrivate = oneAnonymousObject.TvShow.IsPrivate, 
      TotalSubscriptions = oneAnonymousObject.TvShow.TotalSubscriptions, 
      News = oneAnonymousObject.TvShowNews.ToList() 
     }, 
     User = oneAnonymousObject.User 
    }; 
    subscriptions.Add(subscription); 
} 

Entity Framework команды, если вы видите это, пожалуйста, пожалуйста, пожалуйста, сделать это проще.

 Смежные вопросы

  • Нет связанных вопросов^_^