Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von serial
Thema: automatisch aus Properties (auch nested) eine Expression erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

also das Ausmaß war mir nciht klar. Aber der Hintergrund:

Ich arbeite in einem Projekt, wo für Logeinträge die Entities mit ihren Werten geloggt werden (im Falle eines Fehlers). Nun führt dies oft zu Problemen mit Lazyloading, sodass sich die Entwickler hier entschlossen haben, vor dem Loggen einfach die Entity nochmal zu laden, mit allen Informationen die für das Logging gebraucht werden. Dies führte oft dazu, dass neue Entwickler einfach vergessen haben die nötigen Includes anzugeben etc. Nun war mein erster naiver Gedanke, dies zu automatisieren. Das es kein best practise ist, ist mir klar :/

mfg
serial

Thema: automatisch aus Properties (auch nested) eine Expression erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

HI,

@Abt: ja sorry ich spreche vom EF, meine Gedanken waren in einem anderen Kontext.

Das es kein 3 Zeiler wird ist mir klar, allerdings kenne ich mich zu wenig mit Expressions aus, um das ohne einen Anstoß hinzubekommen. Und genau das Include via Lambda will ich ja nutzen, dafür möchte ich mir ja für jede property welche es nachzuladen gilt, automatisch ein Lambda erzeugen um dies dann EF zu übergeben.

mfg
serial

Thema: automatisch aus Properties (auch nested) eine Expression erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

HI,

danke schonmal. Also der rekursive aufruf erfolgt, allerdings immer auf das übergebene kind element. (logischerweise).

Was will ich erreichen?

Ich möchte eine MEthode anbieten, welche es erlaubt für eine Linq2Sql-Abfrage alle Includes implizit per Ebenen anzugeben. Also das alle Properties bis zu einer gewünschten Tiefe gleich geladen, und nicht nachgeladen werden. Ich hoffe das habe ich verständlich ausgedrückt.

mfg
Serial

Thema: automatisch aus Properties (auch nested) eine Expression erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich möchte, zur vereinfachung von Linq2SAQL-Includes, eine Methode schreiben, welche alle Properties einer Entity als Expression zurückgibt. Dabei sollen auch auf Navigationseingeschaften zugegriffen werden (für Eager-Loading).

Als Beispiel soll folgender Code dienen (nicht sinnvoll, ich weiss)


public class Person
    {
        public Person()
        {
            Adresses= new List<Adress>();
        }

        public string Name { get; set; }
        public int Age { get; set; }
        public IList<Adress> Adresses { get; set; }
        public IList<string> Names { get; set; }
        public City City { get; set; }
    }

    public class Adress
    {
        public string Street { get; set; }
    }

    public class City
    {
        public string Name { get; set; }
        public IList<string> Plz { get; set; }
    }

Als Ergebnis würde ich mir dann eben Wünschen:

entity => entity.Adresses;
entity => entity.City;
entity => entity.City.Plz;

folgenden Code habe ich:


public class PropertyExtractor
    {
        public IEnumerable<Expression> GetNavigationProperties<T>(T entity, int level)
        {
            var entityType = entity.GetType();
            var result = GetNavigationPropertiesInternal(entityType, level, 0);
            return result;
        }

        public IEnumerable<Expression> GetNavigationPropertiesInternal(Type entityType, int maxDepth, int currentDepth)
        {
            var result = new List<Expression>();
            foreach (var propertyInfo in entityType.GetProperties(BindingFlags.Instance | BindingFlags.Public))
            {
                if (propertyInfo.PropertyType.IsPrimitive || propertyInfo.PropertyType == typeof(string))
                    continue;

                //here we have to concat the parent-accessor
                var parameter = Expression.Parameter(entityType, "entity");
                var property = Expression.Property(parameter, propertyInfo);
                var funcType = typeof(Func<,>).MakeGenericType(entityType, propertyInfo.PropertyType);
                var lambda = Expression.Lambda(funcType, property, parameter);
                if (currentDepth ≤ maxDepth)
                {
                    Type type = ListArgumentOrSelf(propertyInfo.PropertyType);
                    foreach (var info in GetNavigationPropertiesInternal(type, maxDepth, currentDepth++))
                        result.Add(info);
                }
                result.Add(lambda);

            }
            return result;
        }

        public Type ListArgumentOrSelf(Type type)
        {
            if (!type.IsGenericType)
                return type;
            if (type.GetGenericTypeDefinition() != typeof(IEnumerable<>) && !typeof(IEnumerable).IsAssignableFrom(type))
                throw new Exception("Only IEnumerable<T> are allowed");
            return type.GetGenericArguments()[0];
        }

    }

allerdings komme ich da nur auf die erste Ebene, nciht auf die 2te:
entity => entity.City.Plz.

HAt jemand eine Idee für mich?

Danke =)

mfg
Serial

Thema: Welches Control ist für folgende Struktur am besten geeignet?
Am im Forum: Web-Technologien

Hallo MarsStein,

danke für die Antwort. DAs macht natürlich Sinn.
Wie kann ich allerdings die Rows/Columns für die Eingabefelder der Tage erstellen, da die Columns dieser Felder dynamische Namen haben, welche mir nicht bekannt sind um die per Bind im Template zu verwenden.

mfg
serial

Thema: Welches Control ist für folgende Struktur am besten geeignet?
Am im Forum: Web-Technologien

Hallo,

ich wollte mal wissen, welches Control aus eurer Sicht für die Struktur im Dateianhang am besten geeignet ist?

Alle Dropdownlisten werden mit Daten gefüllt und müssen pro Column unterschiedliche Daten zulassen.
Die ersten 4 Rows sind immer statisch, darunter die Tage können 0-n Rows sein.

Bis jetzt ist mir, bis auf das Zusammenbauen einer eigenen Tabelle nichts weiter eingefallen, da die anderen Controls alle Columnbezogen arbeiten. Vielleicht hat ja jemand eine gute Idee.

mfg
serial

Thema: OverflowButton vom Toolstrip vergrößern
Am im Forum: GUI: Windows-Forms

Hi,

und wenn man das overflow deaktiviert, und das Toolstrip sich autopmatisch in der Größe anpassen lässt?

mfg
serial

Thema: Ordner durchsuchen: Nur Dateinamen in einer festen Syntax ermitteln
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

HI,

wo ist das Problem? Ich denke DirectoryInfo oder Directory sind deine Freunde.

mfg
Serial

Thema: Form wird beim Laden des Projektes als funktionsfähige Form angezeigt
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hi,

du kannst im VS eine Start-form festlegen. Diese wird dann auch angezeigt wenn VS startet. Solltest du dann in dieser Form im Konstruktor oder im Load-Event etwas machen, zB eine textbox anzeigen, wird diese auch im VS angezeigt (da auch der Designer diese aufruft).

Umstellen kannst du das in den Projekteigenschaften.

mfg
serial

Thema: Kategorien und Verwendung von Routing
Am im Forum: Web-Technologien

Hi,

wenn das Schema immer gleich bleibt, kannst du theoretisch eine Route definieren, z.B:


routes.MapRoute(
    "kategorieRoute", // Route name
    "{controller}/{maincategory}/{subcategory}/{subcategory2}", // URL mit parameter
    new { controller = "Games", action = "Find", maincategory= "all", subcategory = "action", subcategory2 = UrlParameter.Optional } 
);

Damit hast du dann einen Controller Games, mit der Methode Find, und diese würde die Kategorien dann als Parameter bekommen.

Wichtig ist hierbei natürlich die reihenfolge der routen, wenn du mehrere hast.

Beispielurl wäre dann:

Games/PS3/Action/Singleplayer --> alle Params
Games/PC/Sport --> Subcategory 2 bleibt leer
Games/XBOX/ --> Subcategory = action
Games/ --> maincategory = all, Subcategory = action

mfg
serial

Thema: [gelöst] XML Dateien MIT Kommentaren zusammenführen
Am im Forum: Datentechnologien

Welche Kommentare meinst du?
Einfache XML Kommentare, oder XSD-Documentation-Kommentare?

mfg
serial

Thema: DataGridView aus zwei Tabellen füllen mit Entity
Am im Forum: GUI: Windows-Forms

Hallo,

bei Entity gehe ich mal von EntityFramework aus.
Also wenn die Daten immer zusammengehören, kannst du entweder ein EF-Model erzeugen, welches die Eigschaften hat und aus den beiden Tabellen gefüllt wird, oder du schreibst die selbst eine Klasse.

Insgesamt kommt es natürlich darauf an, was du noch alles vor hast. Aber wenn du die Relationen (wenn in der DB welche vorhanden) richtig ansprichst, kannst du eigentlich auch mit deiner Vorgehensweise die UI füllen.

mfg
serial

Thema: Vergleichen 2er CSV Dateien
Am im Forum: Datentechnologien

Hallo,

du kannst auch Intersect in Verbindung mit einem IEqualityComparer verwenden.


class Program
    {
        static void Main(string[] args)
        {
//Simuliert die CSV-Zeilen der beiden Dateien
            List<string[]> lines1 = new List<string[]> { new string[] { "1", "2", "3" }, new string[] { "2", "3", "4" } };
            List<string[]> lines2 = new List<string[]> { new string[] { "1", "2", "3" }, new string[] { "2", "3", "5" } };


            List<string[]> result = lines1.Intersect(lines2,new MyComparer()).ToList();

            Console.WriteLine(result.Count);
            Console.ReadLine();
        }
    }

//Die beiden Methoden müsstest du eben konform ausprogrammieren
    class MyComparer : IEqualityComparer<string[]>
    {
        public bool Equals(string[] x, string[] y)
        {
            if (x.Length != y.Length)
                return false;
            return x[0] == y[0];
        }

        public int GetHashCode(string[] obj)
        {
            return obj[0].GetHashCode();
        }
    }

mfg
Serial

Thema: [Erledigt] XML-Schema-Validierung ignoriert key und keyref Definition
Am im Forum: Datentechnologien

Hallo,

wie validierst du? Auf einem XMLReader oder Document?
Vielleicht ist der Key in einem optionalen Element verschachtelt?

mfg
Serial

Thema: Visual Studio Pro 2010 - erstellen von WinForm-Projekt für .NET 2.0 läuft auf Fehler
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Wenn du an keine Informationen weiter herankommst, was fehlgelaufen ist, stellt sich die frage, ob du das programm noch ändern kannst, um zB unbehandelte Ausnahmen zu loggen, um an weitere Informationen zu kommen.

mfg
Serial

Thema: Zeilenumbruch in String
Am im Forum: Web-Technologien

Hi,

auch das funktioniert:


string part = "Hallo <br />";
            for (int i = 0; i < 3; ++i)
            {
                part += string.Format("{0} <br />", i);
            }
            return part;

vielleicht solltest Du mal etwas Code zeigen, vielleicht ist da der Fehler versteckt.

mfg
serial

Thema: Zeilenumbruch in String
Am im Forum: Web-Technologien

Hallo,

du benutzt ja anscheinend MVC, daher solltest Du dir mal die Klasse MvcHtmlString anschauen.

Allerdings funktioniert bei mir das ohne Probleme:


 public string Index()
        {
            return "Hallo <br /> Sie";
        }

Aber auch die Googlesuche bringt viele helfende Ergebnisse.

mfg
serial

Thema: Pattern (string) auswerten und auf ein Objekt anwenden (EMail-Adresse erzeugen)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

danke herbivore für den Tipp, ich habe das FormatsWith entsprechend angepasst, um genau die oben genannte Syntax zu erreichen.

Hier der Code, sollte es jemanden interessieren:


 public static string FormatWith(this string format, IFormatProvider provider, object source)
        {
            if (format == null)

                throw new ArgumentNullException("format");

            Regex r = new Regex(@"\{\{|\{([\w\.\[\]]+)((?:[,:][^}]+)?\})",
 RegexOptions.Compiled | RegexOptions.CultureInvariant | RegexOptions.IgnoreCase);

            List<object> values = new List<object>();
            string rewrittenFormat = r.Replace(format, delegate(Match m)
            {
                string propertyName = m.Groups[1].Value;

                if (propertyName.Length == 0)
                    return m.Value;

                values.Add(propertyName == "0" ? source : DataBinder.Eval(source, propertyName));

                string len = m.Groups[2].Value.Replace(",", "").Replace("}", "").Replace(" ", "").Replace(":","");
                if (!String.IsNullOrEmpty(len))
                {
                    int leng;
                    if (Int32.TryParse(len, out leng))
                    {
                        string value = values[values.Count - 1].ToString();
                        value = value.Substring(0, leng);
                        values[values.Count - 1] = value;
                    }
                }
                return "{" + (values.Count - 1) +"}";
            });
            return string.Format(provider, rewrittenFormat, values.ToArray());
        }

mfg
Serial

Thema: [erledigt] Umlaute und Sonderzeichen bei .csv export
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@herbivore, ja da hast du natürlich recht, andersherum =)

Thema: Pattern (string) auswerten und auf ein Objekt anwenden (EMail-Adresse erzeugen)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi Abt,

das hört sich logisch an, danke. Komm ich da auch noch einfach an die Seperatoren ran (ich kenn mich mit regex nicht wirklich aus).

@herbivore: danke, ich schau mir das mal an. Leider habe ich nur teilweise einfluss auf das pattern

mfg
serial

Thema: [erledigt] Umlaute und Sonderzeichen bei .csv export
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

du musst UTF-8 verwenden (für das CSV-File).

mfg
serial

Thema: Pattern (string) auswerten und auf ein Objekt anwenden (EMail-Adresse erzeugen)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich habe gerade ein kleines Problem, und wollte mal von euch eine elegante Möglichkeit wissen wie ich dieses lösen kann:

Ich habe ein Objekt, welches unterschiedliche Eigenschaften hat, nun soll aus den Werten dieser Eigenschaften ein string erzeugt werden. (zB Email-Adresse)

Wie die Werte verwendet werden, werden in einem Pattern dargestellt.

Beispielpattern:

{Name}.{Surename:1}

Wenn wir jetzt ein Objekt haben, welches die Eigenschaft Name mit dem Wert "Mustermann", und eine Eigenschaft Surename mit dem Wert "Max" hat, soll daraus folgendes erzeugt werden:

Mustermann.M (das :1 hinter Surename heisst, nur der erste Buchstabe)

Dieses Pattern ist dabei Flexibel, dass man auch {Surename}_{Name:8} (Max_Musterma) verwenden kann, oder {Surename}_{Name}.{Surename:1} (Max_Mustermann.M) etc...

Wie würdet ihr das am elegantesten abbilden? Ich dachte an Regex.Split, aber so richtig ist die Lösung noch nicht in meinen Gedanken materialisiert. Vielleicht kann mir jemand einen Denkanstoß geben :)

mfg
Serial

Thema: Binding auf unmanged Objekte
Am im Forum: GUI: WPF und XAML

Hi,

also wenn ich mit externen Komponenten arbeite, kapsele ich diese immer in einer C# Klasse. Würde hier auch gut mit dem MVVM zusammenpassen, indem du deine Komponente in einem ViewModel kapselst und dieses dann bindest.

mfg
serial

Thema: Objekt/Liste von einem Form zum anderen "by ref" übergeben
Am im Forum: GUI: Windows-Forms

Hi,

prinzipiell kannst du natürlich das zu bearbeitende Item mitgeben, da spricht ja erstmal nichts dagegen. Was macht denn die Form noch alles? Zeigt sie auch eine Liste an? Wenn nicht, bräuchtest du die Liste ja auch nicht übergeben, sondern die Form gibt das neue Item einfach zurück, und der Aufrufer kann dann das Item hinzufügen.

mfg
serial

Thema: Refresh an IE-Prozess senden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

hei danke.

Wenn wirklich nur nen wrapper drüber ist, wieso bringt das control einen JS-Fehler, wohin der IE den nicht bringt?

mfg
serial

Thema: Refresh an IE-Prozess senden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

leider funktioniert dann die Seite nicht.
Welche JS-Engin benutzt denn das Control? Bzw kann man da noch irgendwie Kontrolle übernehmen?
Denn in allen Browsern bringt das selbe HTML keinen Fehler.

mfg
serial

Thema: Refresh an IE-Prozess senden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo MarsStein,

ich bekomme in einem Webbrowser-Control Javascriptfehler, welche mit dem gleichen HTML weder im IE, FF,Opera oder Chrome auftreten. Darum habe ich mich davon erstmal verabschiedet, da ich keine Ansatzpunkte zur Behebung der JS-Fehler habe. (das HTML ist nicht von mir erzeugt, hat aber wie gesagt in allen anderen Browsern keine Fehler, nur in dem Control)

Wenn du dazu einen Tipp hast, gern :)

mfg
serial

Thema: Refresh an IE-Prozess senden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

ich haabe zur Laufzeit einen Process gestartet, welcher den IE öffnet. Nun möchte ich ein refresh an den geöffneten IE schicken, damit er die Seite neu lädt. Entweder seh ich den Wald vor lauter Bäumen nicht, aber ich habe noch keine Lösung gefunden.

Kann mir jemand helfen.

folgender Code:


 private  void OpenIE()
        {
            if (!String.IsNullOrEmpty(data))
            {
                if (String.IsNullOrEmpty(_file))
                {
                    _file = Path.GetTempFileName();
                    _file = Path.ChangeExtension(_file, "html");
                }
                File.WriteAllText(_file, data);
                if(_p==null)
                     _p = Process.Start(_file);
                else
                    //hier nur ein refresh senden, keinen neuen IE öffnen

            }
        }

danke
serial

Thema: Deserialisieren/Ignorieren von neuen XML-Elementen
Am im Forum: Datentechnologien

Hallo,

nein das bedeutet, das er keine Objekte mehr erstellt.

Also folgendes einfaches (beispielhaftes) XML (auf diesem wurden Klassen erzeugt)

<Root>
 <Child1>
   <Child11 />
   <Child11 />
 </Child1>
 <Child1>
   <Child11/>
   <Child11/>
 </Child1>
</Root>

Wenn man nun deserialisiert, hab ich eben meine Rootklasse mit Liste von Child1 (oder 2 Properties, jenachdem wir Schema aussieht), und jedes Child1 eben 2 Properties von Child11.

Wenn ich das XML nun dahingehend verändere:
<Root>
 <Child1>
   <Child11 />
   <Child22 />   <---- hier ist das neue Element
   <Child11 />
 </Child1>
 <Child1>
   <Child11/>
   <Child11/>
 </Child1>
</Root>

Dann habe ich bei dem ersten Child1-Objekt nur noch die erste Child11-Eigenschaft gefüllt, und die zweite bleibt leer, weil vorher das neue Element Child22 vorkommt. Das 2te Child1-Objekt ist wieder korrekt gefüllt.

mfg
Serial

Thema: Deserialisieren/Ignorieren von neuen XML-Elementen
Am im Forum: Datentechnologien

Hallo,

ich habe folgendes Problem:

Ich habe Code per XSD erzeugt für ein spezielles XSD-Schema. Natürlich möchte ich XML-Files in Objekte deserialisieren. Nun kann es sein, das dem Schema/und den XML-Files neue Elemente hinzugefügt werden (Schema ist aber abwärtskompatibel, also alte Files sind immer valide gegen ein neues Schema). Nun ist das Problem bei der deserialisierung, dass wenn der XmlSerializer an das neue Element im XML kommt, er aller Elemente gleicher Ebene danach nicht mehr deserialisiert. Sollte er nicht eigentlich nur das unbekannte elemente ignorieren, und danach weiter fortfahren?

Gibt es hier eine Möglichkeit für mich?

mfg
Serial