Как группировать и упорядочить, с помощью LINQ, NHibernate и uNHAddins - PullRequest
2 голосов
/ 20 сентября 2011

Мы создаем приложение WPF, используя базу данных Oracle, также используя расширения NHibernate и uNHAddins.В DataGrid мы пытаемся получить значения из таблицы с помощью этого запроса LINQ:

return (from f in rFConsumption.GetAll()
                let d = f.CounterDtm
                where f.CounterDtm >= dataHoraInicio && f.CounterDtm <= dataHoraFim
                group f by (d.Year - 2000) * 384 + d.Month * 32 + d.Day into g
                select new RFConsumption
                {                       
                    COGCounter1 = (g.Sum(f => f.COGCounter1)),
                    BFCounter1 = (g.Sum(f => f.BFCounter1)),
                    NatGasCounter1 = (g.Sum(f => f.NatGasCounter1)),
                    MixGasCounter1 = (g.Sum(f => f.MixGasCounter1)),
                    COGCounter2 = (g.Sum(f => f.COGCounter2)),
                    BFCounter2 = (g.Sum(f => f.BFCounter2)),
                    NatGasCounter2 = (g.Sum(f => f.NatGasCounter2)),
                    MixGasCounter2 = (g.Sum(f => f.MixGasCounter2)),
                    COGCounter3 = (g.Sum(f => f.COGCounter3)),
                    BFCounter3 = (g.Sum(f => f.BFCounter3)),
                    NatGasCounter3 = (g.Sum(f => f.NatGasCounter3)),
                    MixGasCounter3 = (g.Sum(f => f.MixGasCounter3)),
                }
                ).ToList<RFConsumption>();

Итак, мой вопрос: Как мне использовать group by, супорядочить, используя NHibernate; Как создать группу по полю данных даты возврата в указанную группу.

1 Ответ

1 голос
/ 21 сентября 2011

Вы можете написать один и тот же запрос с помощью NHibernate несколькими способами, наиболее интересным для меня является NHibernate QueryOver <>.Итак, если ваш запрос работает нормально, тогда этот запрос должен работать:

 return Session.QueryOver<rFConsumption>()
            .Where( fc => (fc.CounterDtm >= dataHoraInicio && fc.CounterDtm <= dataHoraFim))
            .SelectList(list => list
                .SelectGroup(f => ((f.CounterDtm.Year - 2000) * 384 + f.CounterDtm.Month * 32 + f.CounterDtm.Day)) //use group by
                .Select(exp =>
                    new RFConsumption()   //here you define the return data type based on your specified group
                    {
                        // exp[0] represents the data returned and grouped by the above statements, so here you can reform it to fit into the form of your new entity
                        // exp[0] here will be equivilant to g in your query
                    })
                    .OrderBy( ee => ee.COGCounter1 ) //order by any of the properties of RFConsumption
                    .ToList<RFConsumption>();

, сначала вы должны добавить объект RFConsump:

public calss RFConsumption
{
     public int COGCounter1  { get; set; }
     public int BFCounter { get; set; } 
     ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...