Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Hjälp med LINQ

Postades av 2012-08-30 18:08:52 - Rasmus Andersson, i forum c# (c-sharp), Tråden har 1 Kommentarer och lästs av 6918 personer

Hej!

Jag har en tabell som ser ut så här.

CATEGORY
----------------------
ID - INT - PK - AutoIncrease
Titel - Varchar(30)
Parent - Int

Parent är NULL om det är en huvudkategory

Sedan har jag en produkt tabell med en referens till Category.ID.

Det jag behöver hjälp med är att få ut alla produkter under vald kategori och även produkter i underkategorier(kan vara i flera steg).


Svara

Sv: Hjälp med LINQ

Postades av 2012-09-04 16:32:01 - Tomas Granlund

Tror inte det går att göra det med en enkel sats som letar vidare i godtyckligt många steg.

Men lite rekursion kanske?

public class Category
{
    public int CategoryId { get; set; }
    public int? ParentCategoryId { get; set; }
    public string Title { get; set; }
}
public class Product
{
    public string Title { get; set; }
    public int CategoryId { get; set; }
}

public List<Product> GetProductsByCategory(int categoryId, List<Category> categories, List<Product> products)
{
    var immediateChildren = products.Where(c => c.CategoryId == categoryId);
    var descendantChildren = new List<Product>();
    foreach (var subcategory in categories.Where(c => c.ParentCategoryId == categoryId))
    {
        descendantChildren.AddRange(GetProductsByCategory(subcategory.CategoryId, categories, products));
    }

    return immediateChildren.Union(descendantChildren).ToList();
}

public void TestGetProductsByCategory()
{
    var categories = new List<Category>()
    {
        new Category() { CategoryId = 1, Title = "Böcker" }, 
        new Category() { CategoryId = 2, Title = "Skönlitteratur", ParentCategoryId = 1 },
        new Category() { CategoryId = 3, Title = "Facklitteratur", ParentCategoryId = 1 },
        new Category() { CategoryId = 4, Title = "Fantasy", ParentCategoryId = 2},
        new Category() { CategoryId = 5, Title = "Skräck", ParentCategoryId = 2}
    };
    var products = new List<Product>()
    {
        new Product() { CategoryId = 4, Title = "Kampen om skäggtronen"}, 
        new Product() { CategoryId = 4, Title = "Sagan om skägget"},
        new Product() { CategoryId = 5, Title = "Skäggets tid"},
        new Product() { CategoryId = 5, Title = "Ett skägg kommer lastat"},
        new Product() { CategoryId = 3, Title = "Skägg Smorgasbord"},
        new Product() { CategoryId = 3, Title = "Skägg for dummies"},
        new Product() { CategoryId = 3, Title = "Allt om skägg"}                
    };
            
    var result = GetProductsByCategory(1, categories, products); // Borde vara alla 7
    result = GetProductsByCategory(6, categories, products); // Borde vara tomt
    result = GetProductsByCategory(4, categories, products); // Borde vara de 2 under Fantasy
    result = GetProductsByCategory(2, categories, products); // Borde vara de 2 under Fantasy, samt de 2 under Skräck

    var cycleCategories = new List<Category>()
    {
        new Category() { CategoryId = 1, Title = "Velocipeder", ParentCategoryId = 2 }, 
        new Category() { CategoryId = 2, Title = "Cyklar", ParentCategoryId = 1 }
    };
    result = GetProductsByCategory(2, cycleCategories, products); // Torde gå sådär halvbra...
}

Edit: formatering och la till ett fall med cykliskt kategoriträd


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 763
27 959
271 761
427
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies