2015-08-05 3 views
0

Это моя модель:как сделать группу, и OrderBy LINQ

public partial class DEGIVREUSE_SITE 
{ 
    public int EVENEMENT_ID { get; set; } 
    public string DEGIVREUSE_ID { get; set; } 
    public string SITE_COD { get; set; } 
    public string ETAT_GLOBAL { get; set; } 
    public string ETAT_CARBURANT { get; set; } 
    public Nullable<int> KM_CHASSIS { get; set; } 
    public Nullable<int> HEURE_CHASSIS { get; set; } 
    public string ETAT_FONCTIONNEMENT { get; set; } 
    public Nullable<int> HEURE_GROUPE { get; set; } 
    public string COMMENTAIRE { get; set; } 
    public virtual DEGIVREUSE DEGIVREUSE { get; set; } 
    public virtual SITE SITE { get; set; } 
    public virtual EVENEMENT EVENEMENT { get; set; } 
} 
[DataContract] 
public class InventaireDegivreuse : Evenement 
{ 
    public InventaireDegivreuse() 
     : base(-1, Global.EvenementType.InventaireDegivreuse, DateTime.MinValue) 
    { 
    } 

    public InventaireDegivreuse(int id, DateTime date, string libelle, string societe) 
     : base(id, (int)Global.EvenementType.InventaireDegivreuse, date, libelle, "", "", societe) 
    { 
     ListeDegivreuses = new List<EtatDegivreuse>(); 
    } 

    [DataMember] 
    public List<EtatDegivreuse> ListeDegivreuses { get; set; } 

    public void AddDegivreuse(EtatDegivreuse degivreuse) 
    { 
     lock (ListeDegivreuses) 
      ListeDegivreuses.Add(degivreuse); 
    } 

    public int NbDegivreuses 
    { 
     get 
     { 
      lock (ListeDegivreuses) 
       return ListeDegivreuses.Count; 
     } 
    } 

    public override void GenereLibelle() 
    { 
     Libelle = Properties.Resources.InventaireDegivreuse.Replace("%s", SocieteNom); 
    } 
} 

Мне нужно OrderBy всех событий с EVENEMENT_DT_CREA и после каждого Societe я получить первый элемент InventaireDegivreuse (более нового тот, который имеет Самый большой EVENEMENT_DT_CREA), я попробовать этот запрос, но я был плохой результат:

var @eventss = GetQuery(unitOfWork).Include(entity => entity.EVENEMENT).OrderByDescending(e => e.EVENEMENT.EVENEMENT_DT_CREA).GroupBy(m => m.EVENEMENT.SOCIETE_NOM).First().ToList(); 

В моем решении для только одного Societe, у меня есть правильный результат, как этот:

public InventaireDegivreuse GetLastBySociete(IReadOnlyUnitOfWork unitOfWork, string societeName) 
    { 
     var @event = GetQuery(unitOfWork).Include(entity => entity.EVENEMENT).OrderByDescending(e => e.EVENEMENT.EVENEMENT_DT_CREA).FirstOrDefault(m => m.EVENEMENT.SOCIETE_NOM ==societeName); 
     return DatabaseMapping.Map<DEGIVREUSE_SITE, InventaireDegivreuse>(@event); 
    } 

Любая идея, пожалуйста?

+0

Не могли бы вы перевести на английский? Я знаю, что это теоретически не имеет значения, но легче следить за тем, что происходит с английскими идентификаторами. –

+1

Кроме того, когда вы говорите «у меня был плохой результат», не могли бы вы быть более ясными о 1), что вы ожидали увидеть, и 2) что вы на самом деле получили? –

ответ

1

Это будет трудно решить, что вы хотите, но я подозреваю, что вы хотите что-то вроде этого:

var @event = GetQuery(unitOfWork) 
      .Include(entity => entity.EVENEMENT) 
      .GroupBy(e => e.EVENEMENT.SOCIETE_NOM) 
      .Select(g => g.OrderByDescending(e => e.EVENEMENT.EVENEMENT_DT_CREA) 
         .First()); 
+0

Я пробую ваше решение, но у меня есть ошибка: Oracle 10.2.0.5.0 ne prend pas en charge APPLY – user1428798

+0

проблема oracle - это сначала, когда я удаляю сначала, нет проблем, как я могу решить эту проблему – user1428798

+0

Попробуйте использовать ' FirstOrDefault() 'вместо этого. –