Komplexe LINQ-Abfrage - Ich stehe auf dem Schlauch

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von enba.

    Komplexe LINQ-Abfrage - Ich stehe auf dem Schlauch

    Moin,

    entschuldigt den aussagelosen Titel, aber mir ist es nicht gelungen, mein Problem in wenigen Worten zusammenzufassen.

    Folgendes lässt mir gerade die Rübe rauchen: Ich besitze eine Liste an Objekten. Jedes dieser Objekte besitzt ein String-Array, welches mit Versionsnummern gefüllt ist, sowie einen Boolean-Property ​Modified

    C#-Quellcode

    1. ​public class MyObject
    2. {
    3. public string Name { get; set; }
    4. public string[] VersionList { get; set; }
    5. public bool Modified { get; set; }
    6. }

    Die Strings im VersionList-Array sehen dabei z.B. so aus:

    Quellcode

    1. ​STD16.00
    2. GERFIN11.00
    3. XCUST1.00
    4. YCUST1.00

    Die Versionsnummern lassen sich hierbei in 2 Oberkategorien einteilen: Standard und Custom. Standard wären im oberen Beispiel alle Versionen mit dem Prefixen STD (für ein gewöhnliches Standardobjekt) sowie GERFIN (für ein Objekt, das standardmäßig an deutsche Finanzgesetze angepasst wurde). Custom wären dementsprechend die Versionsnummern mit Prefix XCUST und YCUST.

    Die Standard-Prefixe sind alle bekannt und fest, die Custom-Prefixe sind unbekannt. Die anschließenden Ziffern variieren in beiden Fällen durchgängig.

    ich möchte nun per LINQ eine Liste aller Objekte erhalten, welche des Property Modified gesetzt haben, jedoch keine Custom-Version besitzen. Also so in etwa:

    C#-Quellcode

    1. ​from obj
    2. in Objects
    3. where obj.Modified
    4. && obj.VersionList.AllNotMatchingWildcard("STD%|GERFIN%").Count() == 0
    5. select obj;

    Und ich stehe leider völlig auf dem Schlauch, wie ich das am besten (bzw. überhaupt) geschachtelt bekomme :(

    Hat einer von euch eventuell eine Idee?
    Habs tatsächlich gerade so ähnlich gelöst:

    C#-Quellcode

    1. var objects = from obj
    2. in Objects
    3. where obj.Modified
    4. && obj.VersionList.Except(obj.VersionList.Where( p=> p.StartsWith("STD") || p.StartsWith("GERFIN"))).Count() == 0
    5. select obj;

    Ich war wohl einfach ein bisschen zu sehr auf einen LIKE-ähnlichen Operator fixiert X/ wobei deine Lösung noch ein stück eleganter ist. Danke!