Avatar billede dl Nybegynder
24. marts 2009 - 07:47 Der er 4 kommentarer og
1 løsning

Linq, udtræk af DTO, minus Articler

Jeg er ved at sættte mig ind i linq, og der er jo ingen bedre måde at gøre det på, end at bruge det. Hvilken har vist sig at give mig et lille problem.

Jeg har nogle Articler, som kan vises på en Page.
Man kan ikke have samme article på samme page to gange.

Så, jeg har i min Article Table:

* Article 1, 2, 3, 4, 5 og 6

Og lige så i min PageArticle Table har jeg

* Page 1 som har en 
dif til Article: 1, 2, 3 og 4

I min Page table

* Page 1


Jeg skal nu lave et udtræk hvor jeg trækker på tværs af disse tabler, da jeg skal bruge nogle ID og titler, samt have fra trukket Article 5 og 6.

Jeg har haft success med at dele linq sætning i to dele, og dermed får jeg mit result. Men det kan da ikke være rigtig at man ikke kan lave det i en sætning ?


Her er min method:

public IQueryable<Data.DTO.PageArticleListDTO> ArticleListNotAttached(Guid pageGuid)
        {
            var article_list = (from a in db.Articles
                                select a).Except<Data.Repositoryes.MSSQL.Article>(

                            from p in db.Pages
                            from a in db.Articles
                            from pa in db.PageArticles

                            where  p.PageGuid == pageGuid &&
                                    p.PageGuid == pa.PageGuid &&
                                    pa.ArticleGuid == a.ArticleGuid
                            select a);

            // pass the articles into a dto
            var result_list = (from a in article_list
                              from pa in db.PageArticles
                              orderby pa.IndexNo
                              select new Data.DTO.PageArticleListDTO
                              {

                                  //Get the current page guid
                                  PageGuid = pageGuid,
                                  ArticleGuid = a.ArticleGuid,
                                  ArticleHeadLine = a.HeadLine,
                                  ArticleIndexNo = pa.IndexNo

                              }).Distinct<Data.DTO.PageArticleListDTO>();

            return result_list;

        }


Hvis i skal bruge table metadata så bare skrev det. Og hvis i er i triv om noget så skrev.

// dl

ps. tak for hjælpen.
Avatar billede dl Nybegynder
24. marts 2009 - 08:42 #1
* OBS:  lige en type:
Jeg skal have fratrukket Article 1, 2, 3, 4, og have 5 og 6 tilbage.

Da det jo ikke giver mening at have to af samme articke på samme side.

Grund til at 5 og 6, er at disse skal udskrives på skærmen, så man kan add dem til en side.
Avatar billede dl Nybegynder
05. juni 2009 - 10:31 #2
Jeg lukker snart, ingen svar.
Avatar billede Syska Mester
05. juni 2009 - 11:50 #3
Er det ikke bare at forlænge din første LINQ sætning ..

Altså:
            var article_list = (from a in db.Articles
                                select a).Except<Data.Repositoryes.MSSQL.Article>(

                            from p in db.Pages
                            from a in db.Articles
                            from pa in db.PageArticles

                            where  p.PageGuid == pageGuid &&
                                    p.PageGuid == pa.PageGuid &&
                                    pa.ArticleGuid == a.ArticleGuid
                            select a);


og så bare bygge videre på den ... der er vel ingen grund til som du selv er inde på at lave den i to ... når det kan laves i en enkelt.
Avatar billede dl Nybegynder
05. juni 2009 - 14:48 #4
Jo, det har du ret i.
Tak,  kom med et svar.
Avatar billede Syska Mester
08. juni 2009 - 23:03 #5
Men jeg ville nok lige kontrollere det med en SQL profiler at der ikke bliver lavet noget slam sql kode hvis du også har lidt Performance i tankerne :-)

Men lyder mere til at det bare er test og små prøver ...

men husk ... stol aldrig på linq to sql ... det kan lave det værste lorte sql :-)

og et svar

// ouT
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester