Avatar billede Slettet bruger
18. juni 2009 - 16:23 Der er 5 kommentarer

Linq - udskriv tråde i mappe

det jeg prøver på er at lave et forum lignende eksperten.dk


først vælger man et bibliotek

derefter en mappe i det bibliotek

så en tråd i den mappe


det gemmer oplysningerne i GueryStrings

--------------------------------------------
min kode til at hente bibliotekerne ud:

var Directories = (
    from D in db.Directories
    where Convert.ToString(D.Directory_FK_Type_ID) == "1"
    select D
);

Repeater_Directories.DataSource = Directories;
Repeater_Directories.DataBind();

--------------------------------------------
min kode til at hente mapper i et valgt bibliotek ud:

if (Request.QueryString["Directory"] != null)
{
var ShowDirectory = Request.QueryString["Directory"];
           
var Directory = (
    from D in db.Directories
    where D.Directory_Name == ShowDirectory
    select D
);
           
foreach (var D in Directory)
{
    ViewState["Directory"] = Convert.ToString(D.Directory_ID);
    Literal_Directory.Text = ShowDirectory;
}
           
var Maps = (
    from M in db.Maps
    where Convert.ToString(M.Map_FK_Directory_ID) == Convert.ToString(ViewState["Directory"])
    select M
);
           
Repeater_Maps.DataSource = Maps;
Repeater_Maps.DataBind();
}
}

--------------------------------------------
min kode til at hente tråde i en bestemt mappe:

¨if (Request.QueryString["Map"] != null)
{

var ShowMap = Request.QueryString["Map"];

var Map = (
    from M in db.Maps
    where M.Map_Name == ShowMap
    select M
);

foreach (var M in Map)
{
    Session["Map"] = Convert.ToString(M.Map_ID);
    Literal_Map.Text = ShowMap;
}
}

--------------------------------------------
min kode til at hente en bestent tråd i en bestemt mappe:

if (Request.QueryString["Thread"] != null)
{

var ShowThread = Request.QueryString["Thread"];

var Thread = (
    from T in db.Threads
    from U in db.Users
    from UI in db.Users_Images
    from US in db.Users_Sexes
    where Convert.ToString(T.Thread_Headline) == Convert.ToString(ShowThread)
    && U.User_ID == T.Thread_FK_User_ID
    && UI.User_Image_ID == U.User_FK_User_Image_ID
    && US.User_Sex_ID == U.User_FK_User_Sex_ID
    select new { T, U, UI, US }
);

foreach (var T in Thread)
{
    ViewState["Thread"] = T.T.Thread_ID;
}
           
    Repeater_Thread.DataSource = Thread;
    Repeater_Thread.DataBind();
}
--------------------------------------------
Jeg vil gerne have at når man kommer ind på forumet kan man se hvor mange tråde der er i alt i et bestemt bibliotek

som bliver udskrevet ud fra hvert link til et bibliotek (ligesom her på eksperten.dk)


så når man går ind i det bibliotek vil jeg også gerne der udskrive ud fra hvert link til en mappe hvor mange tråde der er i de enkelte mapper



HJÆLP tak =)
Avatar billede windcape Praktikant
22. juni 2009 - 15:33 #1
Tilføj link attributter mellem dine objekter. (Foreign Keys hvis du benytter en Database).

Se f.eks. dette diagram: http://clausjoergensen.dk/media/files/forumlinq.png

Her kan jeg så hente total antal tråede med:

ForumBoard.Threads.Count();
Avatar billede windcape Praktikant
22. juni 2009 - 15:36 #2
Derudover kan du skrive din kode lidt pænere ved at benytte extension methods, istedet for Queries hele tiden.

var Directories = (
    from D in db.Directories
    where Convert.ToString(D.Directory_FK_Type_ID) == "1"
    select D
);

Kan laves om til:

var directories = db.Directories.Where(d => d.Directory_FK_Type_ID == 1);

Og

var Directory = (
    from D in db.Directories
    where D.Directory_Name == ShowDirectory
    select D
);

til

var directory = db.Directories.Where(d => d.Directory_Name == ShowDirectory);
Avatar billede windcape Praktikant
22. juni 2009 - 15:41 #3
"var Thread = (
    from T in db.Threads
    from U in db.Users
    from UI in db.Users_Images
    from US in db.Users_Sexes
    where Convert.ToString(T.Thread_Headline) == Convert.ToString(ShowThread)
    && U.User_ID == T.Thread_FK_User_ID
    && UI.User_Image_ID == U.User_FK_User_Image_ID
    && US.User_Sex_ID == U.User_FK_User_Sex_ID
    select new { T, U, UI, US }
);"

Dette her kode er direkte ulæseligt! Du bør ikke have selects på den måde. Jeg kan kun gyse om hvordan det er blevet brugt.

Faktisk virker det hele super ustrukturet, og dårlig kodet. Du bør stoppe helt op, og genoverveje din arkitektur, og lave nogle modeller/diagrammer der viser præcist hvordan du skal have dine link attributter.

Og øve dig lidt i at skrive kode der overholder til gænse kode-standarder. Variable starter ALDRIG med store bogstaver! Det er kun klassenavne/structs og namespaces som må det. Samt at benytte extension methods istedet for quries, hvis du kan.
Avatar billede Slettet bruger
25. juni 2009 - 22:08 #4
Jeg har kun rodet med Linq i omkring 2-3 uger.
så er ikke sat så godt ind i hvordan det skrives endnu.

tak for dine svar til mit indlæg. jeg vil prøve det af, skal nok give points når jeg har fået prøvet det af og det virker =)
Avatar billede Slettet bruger
25. juni 2009 - 23:10 #5
jeg har prøvet at kigge lidt på extension methods

det ser lidt uoverskueligt ud synes jeg. kan du give et eksempel på hvordan jeg gør der med mine querystrings?

evt. en forklaring på hvorfor det er bedre end den måde jeg har gjort




tilbage til mit forum - jeg kan godt se hvordan man Counter threads, men hvordan jeg for dem ud på siden ved jeg ikke..

alt andet for jeg ud i en repeater som "eval"

hvordan for jeg det countede ud ved siden af "eval"?
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