🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: alt.pl.comp.lang.csharp
5 messages
5 total messages Started by Macko Wed, 01 Dec 2010 08:33
[NH] QueryOver i distinct
#21851
Author: Macko
Date: Wed, 01 Dec 2010 08:33
30 lines
1904 bytes
Witam,

Query Over w NH 3.0 jak dla mnie to duży postęp jednak nie wiem jak
przepisać zapytania, które działa na tabeli intersekcji. Powiedzmy, że
mamy tabelę filmy_na_plycie, która składa sie z 3 kolumn:

id - PK, autonumerowanie
id_filmu - FK do tabeli filmów
id_plyty - FK do tabeli płyt

powiedzmy że chcemy mieć listę identyfikatorów filmów na płytach, easy
nie:

<sql>

select distinct id_filmu from filmy_na_plycie

</sql>

Teraz jak za pomocą .QueryOver zrobić to samo?

To niżej zadziała, ale nie poda listy unikalnych identyfikatorów:

var moviesOnCDs =
    QueryOver.Of<FilmyNaPlycie>()
            .Select(fnp => fnp.Film.id);

--
Pozdro,
 Macko
Re: [NH] QueryOver i distinct
#21852
Author: Łukasz 'Maly' Ostrowski
Date: Wed, 01 Dec 2010 09:40
28 lines
1509 bytes
On Wed, 1 Dec 2010 00:33:53 -0800 (PST), Macko wrote:
> <sql>
> 
> select distinct id_filmu from filmy_na_plycie
> 
> </sql>
> 
> Teraz jak za pomocą .QueryOver zrobić to samo?
> 
> To niżej zadziała, ale nie poda listy unikalnych identyfikatorów:
> 
> var moviesOnCDs =
>     QueryOver.Of<FilmyNaPlycie>()
>             .Select(fnp => fnp.Film.id);

Nie mam teraz za bardzo czasu, ale wstępnie bym kombinował
dookoła:

QueryOver<FilmyNaPlycie>()
  .Select(
    Projections.Distinct(
      Projections.Property<FilmyNaPlycie>(fnp => fnp.Film)));

Ale bez sprawdzenia nie daję głowy.

-- 
Pozdrawiam,
Łukasz 'Maly' Ostrowski.      http://l3v.eu/
Re: QueryOver i distinct
#21853
Author: Macko
Date: Thu, 02 Dec 2010 08:58
31 lines
2075 bytes
On 1 Gru, 10:40, Łukasz 'Maly' Ostrowski <m...@USUNnemo.pl> wrote:
> On Wed, 1 Dec 2010 00:33:53 -0800 (PST), Macko wrote:
> > <sql>
>
> > select distinct id_filmu from filmy_na_plycie
>
> > </sql>
>
> > Teraz jak za pomoc .QueryOver zrobi to samo?
>
> > To ni ej zadzia a, ale nie poda listy unikalnych identyfikator w:
>
> > var moviesOnCDs =
> >     QueryOver.Of<FilmyNaPlycie>()
> >             .Select(fnp => fnp.Film.id);
>
> Nie mam teraz za bardzo czasu, ale wst pnie bym kombinowa
> dooko a:
>
> QueryOver<FilmyNaPlycie>()
>   .Select(
>     Projections.Distinct(
>       Projections.Property<FilmyNaPlycie>(fnp => fnp.Film)));
>
> Ale bez sprawdzenia nie daj g owy.
>
> --
> Pozdrawiam,
> ukasz 'Maly' Ostrowski.      http://l3v.eu/

Spox, to jest właśnie to co chciałem :)
Re: QueryOver i distinct
#21859
Author: Macko
Date: Mon, 27 Dec 2010 09:05
39 lines
2729 bytes
A więc zabawy z NH3 ciąg dalszy. Tym razem stanąłem na popularnym
temacie tworzenia "summarisów" tzn podsumowań np. raportowych. W moim
przypadku chcę wyświetlić listę filmów wraz z liczbą gatunków
powiązanych z każdym filmem. Takie standardowe podsumowanie
przykładowo:

id | Tytuł pl | Tytuł obcy | Data premiery | Licznik gatunków
-----------------------------------------------------------------
3  | bla      | bla bla    | 1990-01-01    | 2

Za pomocą czystego SQLa załatwiłbym to tak

select f.*, isnull(fg.licznik, 0) as licznik_gatunkow
from dbo.film f left join
(
select id_filmu, count(id_gatunku) as licznik
from dbo.gatunki_filmow
group by id_filmu
) fg on f.id = fg.id_filmu

Agregacja zliczająca gatunki dla każdego filmu za pomocą QueryOver
wygląda u mnie tak:

GenreSummary alias = null;
var genresQuery = QueryOver.Of<GatunkiFilmow>()
.SelectList(lista => lista
.SelectGroup(o => o.Film.Id).WithAlias(() => alias.MovieId)
.SelectCount(o => o.Gatunek).WithAlias(() => alias.GenresCount))
.TransformUsing(Transformers.AliasToBean<GenreSummary>());

Teraz jak to pożenić z encją Film tzn. zjoinować id filmu tą agregacją
powyżej i zwrócić nową encją MovieSummary, która będzie się różniła od
encji Film dodatkową kolumną powiedzmy GenresCount typu int.

Czy da to radę pożenić za pomocą QueryOver?

--
Pozdro,
 Maćko
Re: QueryOver i distinct
#21860
Author: Macko
Date: Tue, 28 Dec 2010 12:14
51 lines
3351 bytes
On 27 Gru, 10:05, Macko <maciej_rych...@o2.pl> wrote:
> A więc zabawy z NH3 ciąg dalszy. Tym razem stanąłem na popularnym
> temacie tworzenia "summarisów" tzn podsumowań np. raportowych. W moim
> przypadku chcę wyświetlić listę filmów wraz z liczbą gatunków
> powiązanych z każdym filmem. Takie standardowe podsumowanie
> przykładowo:
>
> id | Tytuł pl | Tytuł obcy | Data premiery | Licznik gatunków
> -----------------------------------------------------------------
> 3  | bla      | bla bla    | 1990-01-01    | 2
>
> Za pomocą czystego SQLa załatwiłbym to tak
>
> select f.*, isnull(fg.licznik, 0) as licznik_gatunkow
> from dbo.film f left join
> (
> select id_filmu, count(id_gatunku) as licznik
> from dbo.gatunki_filmow
> group by id_filmu
> ) fg on f.id = fg.id_filmu
>
> Agregacja zliczająca gatunki dla każdego filmu za pomocą QueryOver
> wygląda u mnie tak:
>
> GenreSummary alias = null;
> var genresQuery = QueryOver.Of<GatunkiFilmow>()
> .SelectList(lista => lista
> .SelectGroup(o => o.Film.Id).WithAlias(() => alias.MovieId)
> .SelectCount(o => o.Gatunek).WithAlias(() => alias.GenresCount))
> .TransformUsing(Transformers.AliasToBean<GenreSummary>());
>
> Teraz jak to pożenić z encją Film tzn. zjoinować id filmu tą agregacją
> powyżej i zwrócić nową encją MovieSummary, która będzie się różniła od
> encji Film dodatkową kolumną powiedzmy GenresCount typu int.
>
> Czy da to radę pożenić za pomocą QueryOver?
>
> --
> Pozdro,
>  Maćko

Dobra, poradziłem sobie chociaż wyprodukowany przez NH3 SQL nie jest
do końca optymalny.

Teraz jak joinować encję nie tylko z encjami powiązanymi z tą encją,
ale także z encjami głębiej. Tzn: mam encję DVD to mogę wykonać
joinqueryover tylko z encją MovieOnDVD, która w DVD jest listą. Chcę
także wykonać joina encjami powiązanymi z encją MovieOnDVD czyli np
Movie.

Jak to zrobić?
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads