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 6931 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

  • 01:09 Совместные покупки
  • 19:41 Kataloger med erbjudanden för vuxn
  • 19:40 Kataloger med erbjudanden för vuxn
  • 18:00 Online med coola bonusar
  • 17:59 Rekommendation för en spelsajt
  • 17:58 En snabb och trevlig sajt utan lag
  • 20:23 Tips för att välja rätt CBD-styrka
  • 10:01 Erfarenheter av gentaur.se beställ

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 571 771
27 969
271 826
299
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