Linq Hilfe

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von shaebich.

    Guten Abend,

    ich steh heute irgendwie total auf dem Schlauch und hoffe ihr könnt mir helfen.

    Ich habe 2 Tabellen,
    • Produkt
    • Preis
    in der Tabelle Preis sollen täglich aktuelle Preise eingetragen werden. Allerding immer als neuer Datensatz um eine Kursverlauf zu simulieren.

    Nun kommt mein Problem. Und zwar möchte ich per LINQ den Starting Price, also den ersten Preis dieses Produktes herausbekommen.
    Ich habe nun versucht dies in einer Schleife zu lösen.

    Das alles geschieht in einer Schleife welche bestimmte Einstellungen simuliert.

    Bsp.

    - Produkt kommt aus Deutschland (row.Land), der Reseller ist FirmaXX (row.reseller)


    VB.NET-Quellcode

    1. Dim produkte = dsArticle.tblArticles.AsEnumerable.AsParallel
    2. Dim preise = dsArticle.tblPrices.AsEnumerable.AsParallel
    3. For Each row In dsEinstellungen.PreisInfos
    4. Dim abfrage = From p In produkte
    5. Join pr In preise On p.fld_ID Equals pr.fld_FK_priceID
    6. Where p.fld_Land = row.Land AndAlso p.fld_reseller = row.reseller
    7. For Each result In abfrage
    8. ' Write csv file mit allen Artikeln welche zu den Selektionsbediungen passen
    9. Next
    10. Next



    Mein Problem nun ist aber, dass jeder Artikel mehrere Preise hat und ich aber die Abfrage nur auf den "ersten" Preis, bzw. den ältesten machen möchte...

    Ich komme einfahc nicht drauf...

    Danke schonmal für eure Hilfe

    VB1963 schrieb:

    Gib jeden Preis einen Zeitstempel mit und wähle damit den ältesten Preis aus, der zum Produkt gehört...


    Der Timestamp ist drinnen, hab ich mir schon lange angewöhnt jedem DB Eintrag ein TimeStamp + Username mitzugeben.

    Aber formulier ich den Query? Ich komm einfach nicht drauf -.-

    petaod schrieb:

    Achtung Pseudocode:
    Group By ArtikelNummer Select Preis Where Timestamp = Min(Timestamp)
    oder
    Group By ArtikelNummer Order By Timestamp Select First


    Ok Danke. Der Ansatz hat mir geholfen.

    VB.NET-Quellcode

    1. Dim abfrage = From p In produkte
    2. Join pr In preise On p.fld_ID Equals pr.fld_FK_priceID
    3. Where p.fld_Land = row.Land AndAlso p.fld_reseller = row.reseller
    4. Order By q.fld_timestamp Ascending
    5. Group By g.fld_ID Into Group
    6. Select Group.First, Group.Last


    So hat man die ersten und letzten Datensätze in der Gruppe :)

    Dankeschön