Avatar billede madand Nybegynder
25. oktober 2010 - 19:18 Der er 9 kommentarer og
1 løsning

Linq 2 SQL Lambda

Hej med jer :)

Sidder og koger lidt over en lambda expression der ikke vil fungere. Skal sige jeg ikke er ret god til det endnu.

Dette er hvad jeg skal have lavet:
Jeg har 2 tabeller (Tabel 1: PersonalTasks) (Tabel 2: Comments)
Disse tabeller har en relation til TaskId

Hvordan får jeg et join ind i nedenstående kode med lambda? Jeg har prøvet med .GroupJoin() og Join, men jeg kan ikke få det til at fungere, nok fordi jeg gør det forkert.

Jeg skal bare joine Comments tabellen, så jeg kan trække comment ud til min repeater.

if (!Page.IsPostBack)
            {
                var tasks = db.PersonalTasks.OrderBy(x => x.IsDone).ToList();
                PersonalTaskRepeater.DataSource = tasks;
                PersonalTaskRepeater.DataBind();
            }
Avatar billede madand Nybegynder
25. oktober 2010 - 19:18 #1
Jeg bruger ASP.NET Webforms :)
Avatar billede bkp Nybegynder
25. oktober 2010 - 19:40 #2
Hvis du skal Joine, så tænker du nok nærmere på Linq ??

For at kunne give dig en løsning, skal jeg kende din datastruktur, men måske kan dette link give en ide:

http://dotnetperls.com/join

Det kunne måske se således ud:
// Join on the ID properties.
var tasks = from tbl in db.PersonalTasks
            join comment in db.TaskComment on tbl.TaskId equals comment.TaskId
            select;
Avatar billede bkp Nybegynder
25. oktober 2010 - 19:43 #3
Her er lidt om brug af Entityframework:
http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx

Eller det tidligere Ling to Sql:
http://weblogs.asp.net/scottgu/archive/2007/05/19/using-linq-to-sql-part-1.aspx
Avatar billede madand Nybegynder
25. oktober 2010 - 20:11 #4
Hej bkp,

Mange tak for dit svar :)
Jeg vil gerne gøre det med lambda, du ved ikke tilfældigvis hvordan man gør det vel? :)
Avatar billede keysersoze Guru
25. oktober 2010 - 20:43 #5
db.PersonalTasks.Include("Comment")
Avatar billede janus_007 Nybegynder
25. oktober 2010 - 21:23 #6
madand - Har du lavet det i linq to sql med relationer i datamodellen?
Avatar billede madand Nybegynder
25. oktober 2010 - 22:00 #7
Janus, ja det har jeg.

Jeg tror jeg har grebet mit problem forkert an.
Lige nu bruger jeg ovenstående kode til at hive data ud med <%#Eval("Header")%> i en repeater. Og det fungere glimrende med PersonalTasks tabellen.

Men ikke med <%#Eval("Comments.Content")%>

Er der specielle regler når man bruger en repeater?
Avatar billede janus_007 Nybegynder
25. oktober 2010 - 22:38 #8
Jeg ville nok binde i code behind istedet, som du gjorde i dit første indlæg, det giver lidt mere fleksibilitet vil jeg mene.

Anyway du har "en:til:mange" 1:n relation imellem PersonalTasks og Comments eller det vil jeg da næsten tro :)

Når du arbejder i Linq To Sql behøver du ikke joine manuelt, det er mere noget du gør hvis du blot arbejde med objekter og vil bruge linq.

Dvs. for at komme videre fra PersonalTasks til Comments, skal du bare "linqe" altså


var comments = from p in PersonalTasks
select p.PersonalTaskComments;

Ovenstående er i Linq Query Syntax, når du siger lambda er det faktisk Method Syntax og her ville ovenstående være:

var comments = PersonalTasks.Select(x => x.PersonalTaskComments);


Nu ved jeg ikke lige hvordan du kommer frem til den specifikke person, men du sætter formodentligt bare et filter på alá:
var comments = PersonalTasks.Select(x => x.PersonalTaskComments).Where(x => x.PersonId == 123);


Håber det gav lidt forståelse ellers bare spørg løs :)
Avatar billede madand Nybegynder
25. oktober 2010 - 22:46 #9
Du er en stjerne Janus! Jeg ved ikke lige hvorfor jeg ikke tænkte sådan, jeg tror det var intellicense's .Join() der forvirrede mig og at jeg derfor troede jeg skulle bruge den.

Det virker! Tusind tak for hjælpen, smid gerne svar :)
Avatar billede janus_007 Nybegynder
25. oktober 2010 - 22:47 #10
Tiptop
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