Avatar billede CodingJoe Nybegynder
10. december 2012 - 23:08 Der er 6 kommentarer og
1 løsning

Eksempel med joins vha. lamda udtryk

Jeg har brug for et eksempel, hvor der joines mellem 4 tabeller:

TabelA <--> TabelB <--> TabelC <--> TabelD

Der er en betingelse i TabelA og en betingelse i TabelD, og i TabelB og TabelC, vil jeg gerne trække data ud.

Er der en der kan vise mig et eksempel på det?
Avatar billede arne_v Ekspert
11. december 2012 - 00:15 #1
Hvis det er EF og din database har de rette constratints kan du jo bare referere via properties.

Men jeg antager at det ikke er muligt for dig.
Avatar billede arne_v Ekspert
11. december 2012 - 01:50 #2
Til inspiration:

using System;
using System.Collections.Generic;
using System.Linq;

namespace E
{
    public class A
    {
        public int AID { get; set; }
        public string AS { get; set; }
        public int BID { get; set; }
        public int CID { get; set; }
    }
    public class B
    {
        public int BID { get; set; }
        public string BS { get; set; }
    }
    public class C
    {
        public int CID { get; set; }
        public string CS { get; set; }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            List<B> b = new List<B> { new B { BID=1, BS="B1" }, new B { BID=2, BS="B2" } };
            List<C> c = new List<C> { new C { CID=1, CS="C1" }, new C { CID=2, CS="C2" } };
            List<A> a = new List<A> { new A { AID=1, AS="A1", BID=1, CID=2 }, new A { AID=2, AS="A2", BID=2, CID=1 } };
            var q1 = a.Join(b, arow => arow.BID, brow => brow.BID, (arow,brow) => new { AS=arow.AS, CID=arow.CID, BS=brow.BS }).Join(c, abrow => abrow.CID, crow => crow.CID, (abrow,crow) => new { AS=abrow.AS, BS=abrow.BS, CS=crow.CS });
            foreach (var row in q1)
            {
                Console.WriteLine("{0} {1} {2}", row.AS, row.BS, row.CS);
            }
            var q2 = from arow in a join brow in b on arow.BID equals brow.BID join crow in c on arow.CID equals crow.CID select new { AS=arow.AS, BS=brow.BS, CS=crow.CS };
            foreach (var row in q2)
            {
                Console.WriteLine("{0} {1} {2}", row.AS, row.BS, row.CS);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede arne_v Ekspert
11. december 2012 - 01:57 #3
Og her med en ordentlig objekt model:

using System;
using System.Collections.Generic;
using System.Linq;

namespace E
{
    public class A
    {
        public int AID { get; set; }
        public string AS { get; set; }
        public List<B> B { get; set; }
        public List<C> C { get; set; }
    }
    public class B
    {
        public int BID { get; set; }
        public string BS { get; set; }
    }
    public class C
    {
        public int CID { get; set; }
        public string CS { get; set; }
    }
    public class Program
    {
        public static void Main(string[] args)
        {
            List<A> alst = new List<A> { new A { AID=1, AS="A1", B=new List<B> { new B { BID=1, BS="B1" } }, C=new List<C> { new C { CID=2, CS="C2" } } },
                                        new A { AID=2, AS="A2", B=new List<B> { new B { BID=2, BS="B2" } }, C=new List<C> { new C { CID=1, CS="C1" } } } };
            foreach (A a in alst)
            {
                Console.WriteLine("{0} {1} {2}", a.AS, a.B[0].BS, a.C[0].CS);
            }
            Console.ReadKey();
        }
    }
}
Avatar billede CodingJoe Nybegynder
11. december 2012 - 18:00 #4
Jeg har tilladt at sende dig en mail. Håber det er ok. :S
Avatar billede CodingJoe Nybegynder
11. december 2012 - 18:36 #5
Jeg er næsten ved at knække den. Det er placeringen af min where clause, der forvolder mig problemer.
Avatar billede CodingJoe Nybegynder
11. december 2012 - 20:44 #6
Jeg knækkede den :D

Send du bare et svar ind.
Avatar billede arne_v Ekspert
11. december 2012 - 21:45 #7
ok
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