Laden...
S
sra
myCSharp.de - Member
64
Themen
230
Beiträge
Letzte Aktivität
vor 15 Jahren
Dabei seit
21.01.2004
Alter
39
Herkunft
Luzern
Erstellt vor 15 Jahren

Hallo dN!3L

Ganz grandios! Genau so geht es (und macht auch Sinn).
Musste zwar vorgängig .ToList machen, da er den Befehl nicht in SQL umwandeln kann, aber funktioniert bestens.

Danke
sra

Erstellt vor 15 Jahren

Hallo nochmal

Nochmal das Beispiel mit Benutzern und Registern, aber eine andere Frage.

Ich habe eine Tabelle Benutzer, eine Tabelle Register und eine Tabelle RegisterZuBenutzer, da jeder Benutzer mehrere Register haben kann und umgekehrt.

Oberhalb des Gridviews, das mir alle Kombinationen ausgibt, habe ich eine Checkboxlist, in der ich alle Register ausgebe. Wenn ich also ein oder mehrere der Register markiere und auf "filtern" klicke, dann sollen alle Benutzer ins Gridview kommen, die einem der markierten Registern zugewiesen sind.

Versucht habe ich es folgendermassen:


        Dim reg = From r As ListItem In Me.lstRegister.Items Where r.Selected Select r.Value
        For Each r In reg
            user = user.Where(Function(u) u.RegisterIDs.Contains(Integer.Parse(r)))
        Next

RegisterIDs ist eine List<integer>

Der Fehler da dran ist, dass mir dieser Code ANDs zwischen die Statements knüpft, obwohl ich da ORs bräuchte. Ausserdem bräuchte ich eine Klammer um all diese ORs, da ich unter umständen noch weitere Filter per .where anhänge (zB. Datumsfilter).

Wie muss ich das angehen?

Erstellt vor 15 Jahren

Hallo zusammen

Vielen Dank für die schnellen Antworten!
String.Join ist genau das, was ich gesucht habe.

Gruss
sra

Erstellt vor 15 Jahren

Hallo zusammen

Für eine Liste von Benutzern, die ich an ein Gridview binde, möchte ich gerne pro Benutzer eine Auflistung seiner "Register" haben. Jeder Benutzer kann 1-n Register zugeordnet haben (entsprechend einer 1:n Beziehung).

Nun möchte ich gerne die Liste der Register als ein String mit der kommagetrennten Auflistung aller zugeordneten Register von einem Linq Query zurückbekommen. Ist so etwas möglich?

Ich dachte erst, mit der .foreach könnte ich etwas anfangen, allerdings war das daneben gegriffen. Wie würded ihr so etwas angehen?

Gruss
sra

Erstellt vor 15 Jahren

Manchmal muss man sich zum Affen machen um danach trotzdem nicht schlauer zu sein. Schlussendlich habe ich am völlig falschen Ort nach dem Fehler gesucht, und schlussendlich verstehe ich wie es zum Fehler kam nach wie vor nicht.

Die Lösung: Wenn ich die Zeile mit dem Iif(...) wo ich den Wert ausgebe ersetze mit einem normalen If ... Else, dann funktioniert das Ganze tadellos.

<%If (Einwohner(0).HasValue) Then Response.Write(Einwohner(0).Value.ToString("n0")) Else Response.Write("-")%>

Meiner Meinung nach sollte der Code genau dasselbe bewirken wie mein erstes Beispiel

<%=IIf(Einwohner(0).HasValue, Einwohner(0).Value.ToString("n0"), "-")%>

Vielleicht weiss ja noch einer aus dem Handgreif wieso das nicht klappt wie ich es ursprünglich wollte, aber das ist jetzt nicht derart wichtig.

Gruss und vielen Dank für die Hilfe
sra

Erstellt vor 15 Jahren

Hallo Peter

Danke schonmal für die Antwort.

Ich glaube, dass mein Denkfehler hier ist (so stelle ich mir das vor):

Das Array müsste doch für die ersten 5 Positionen einen Wert haben, da es direkt beim Deklarieren auch initialisiert wird.

decimal?[] einwohner = { 0, 0, 0, 0, 0 };

Wenn ich nun im Page_Load den Wert des Arrays an der Position [0] mit einem "nulligen decimal" (also null, aber innerhalb eines nullable decimal) überschreibe, dann müsste imho das Array an dieser Position noch immer "vorhanden sein", der Wert des Inhaltes müsste an dieser Position dann einfach null sein.

naja.. Ganz offensichtlich verhält es sich hier anders.
Sorry wenn ich mich bisschen schwer tue, aber im Moment blicke ich nicht 100% durch.

Wie checke ich denn, ob das Array (das übrigens in diesem Falle für die Positionen 2-5 Werte hat) an dieser Stelle überhaupt einen Wert hat?

Gruss
sra

Edit: Betrachte es als "unwissendes Stochern im Dunkel", aber folgendes bringt nach wie vor eine NullReferenceException:

Not Einwohner(0) = Nothing AndAlso Einwohner(0).HasValue
Erstellt vor 15 Jahren

Einwohner(i) wird erwartungsgemäss ab und zu mal null zurückgeben, wenn für das Jahr keine Daten erfasst sind. Deshalb habe ich das Ding auch als Nullable deklariert (decimal?) und frage bei der Ausgabe des Wertes .HasValue ab.

Im von dir empfohlenen Artikel kann ich nichts über Nullable Types lesen.

Erstellt vor 15 Jahren

Hallo ihr

Ich zweifle grade grundlegend an meinem Verständnis von nullable Types (für euch csharper, so nennt man die Typen mit dem "?" hinten dran).

Folgendes dachte ich, müsste doch funktionieren (sorry für das VB).

Im Code behind habe ich einige Public Member initialisiert (natürlich ausserhalb irgendwelcher Methoden):

Public Einwohner() As Nullable(Of Decimal) = {0, 0, 0, 0, 0}

Im Page_Load fülle ich diese mit dem Resultat eines Linq Queries:

Einwohner(0) = (From p In kopfdaten Where p.kon_Konto = 810 And p.p.bmk_jah_Jahr = Year - 5 Select p.p.bmk_Betrag).Sum()

Das kann zugegebenermassen null ergeben, da unter umständen für das abgefragte Jahr keine Daten vorhanden sind.

In aspx greife ich auf den Public Member dann zu, wobei ich extra HasValue abfrage:

<td class="tdNormal" style="width:80px; text-align:right;"><%=IIf(Einwohner(0).HasValue, Einwohner(0).Value.ToString("n0"), "-")%></td>

Trotzdem kriege ich an dieser Stelle eine NullReferenceException.

Was habe ich nicht (oder falsch) verstanden?

Gruss
sra

Edit: Evt ist es fürs bessere Verständnis nötig zu erwähnen, dass der iif Befehl quasi das equivalent zum ?: Operator in csharp ist.

Erstellt vor 15 Jahren

mooment... wenn ich das child mitselektiere, habe ich natürlich jede erdenkliche Tiefe. Allerdings kann der Repeater da nicht mit umgehen und ich müsste also dynamisch weitere Repater innerhalb des vorherigen Repeaters erstellen.

Geht es wirklich nicht so einfach ein Menü nachzubauen, das dynamisch in der Tiefe ist, ohne die ganzen Menücontrols und -provider?

edit: zum Thema div-Suppe hast du natürlich recht. Entweder gibt es nicht-hirarchische Links (<a>) mit der level als clientId, oder es gibt korrekt verschachtelte listen 😃

Erstellt vor 15 Jahren

Hallo Peter

Die Tiefe brauche ich nur für die Darstellung, sprich das CSS.
Ich kann eigentlich darauf verzichten, indem ich divs entsprechen der Relation einfach verschachtle und dann per CSS Selektor die Verschachtelung aufgreife, aber irgendwo ist das für mich auch nur Neugier, wie man das mit dem Level wohl umsetzt 😃

Aber auch ohne die Level-Property. Wenn ich im SELECT des Queries die Childs (als Collection - ich habe mir entsprechend eine Association im dbml erstellt) einfach mitselektiere, dann habe ich erst eine Tiefe. Wie mache ich das mit 2, 3 oder 5 Levels?

btw. ich weiss, dass ich mit ASP.NET fertige Menübausteine habe und auch den entsprechenden Provider für meine DB Stuktur irgendwo finden würde (oder ASP.NET meine DB Stuktur machen lassen kann), aber die will ich mal aussen vor lassen, weil ich ein sehr kleines Projekt habe, in dem möglichst viel händisch machen will.

10 von 230 Beiträgen