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 sra
Thema: Linq: n zu n Resultate filtern (OrWhere)
Am im Forum: Datentechnologien

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

Thema: Linq: n zu n Resultate filtern (OrWhere)
Am im Forum: Datentechnologien

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?

Thema: Linq: Child Elemente (List) zu einem String zusammenfassen
Am im Forum: Datentechnologien

Hallo zusammen

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

Gruss
sra

Thema: Linq: Child Elemente (List) zu einem String zusammenfassen
Am im Forum: Datentechnologien

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

Thema: NullReferenceException trotz .HasValue ???
Am im Forum: Datentechnologien

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

Thema: NullReferenceException trotz .HasValue ???
Am im Forum: Datentechnologien

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

Thema: NullReferenceException trotz .HasValue ???
Am im Forum: Datentechnologien

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.

Thema: NullReferenceException trotz .HasValue ???
Am im Forum: Datentechnologien

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.

Thema: "Praxistauglicher" Linq Query für Parent-Child Beziehung?
Am im Forum: Datentechnologien

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 :)

Thema: "Praxistauglicher" Linq Query für Parent-Child Beziehung?
Am im Forum: Datentechnologien

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.

Thema: "Praxistauglicher" Linq Query für Parent-Child Beziehung?
Am im Forum: Datentechnologien

Hallo allerseits

Ich möchte eine Art Menüstruktur per Linq aus der DB lesen. Natürlich habe ich das mit einer Parent Child Beziehung gemacht, so dass jeder Menüpunkt einem anderen untergeordnet werden kann.

Jetzt ist es so, dass ich gerne zu den Datenbankfeldern ein zusätzlicher Member namens Level hätte. Sprich: ein Linq Query, das mir alle Einträge in der richtigen Reihenfolge aus der Datenbank holt (also das Child von Eintrag 1 noch vor dem Eintrag 2) und gleichzeitig die "Tiefe" der Verschachtelung erkennt.

Leider habe ich gemerkt, dass ich da ziemlich an meine Linq Grenzen stosse. Vor allem auch, weil ich nicht weiss wie viele "Level" da überhaupt in der DB stecken, ich also quasi einen rekursiven Linq Query bräuchte.

Wie würded ihr so etwas angehen?

Gruss und Danke schonmal für die Inputs

Thema: Von Linq direkt nach Listitem
Am im Forum: Datentechnologien

Hier noch meine Lösung. Warum es aber anders rum nicht geht, versteh ich noch immer nicht.

Me.ddlKanton.Items.AddRange((From k In db.Kantones Order By k.kan_Name Select New ListItem(k.kan_Name, k.kan_ID)).ToArray())

Thema: Von Linq direkt nach Listitem
Am im Forum: Datentechnologien

Hallo dN!3L

Ich habe jetzt ein Testprojekt erstellt, mit nichts als einer Dropdownlist und einer Tabelle in einem dbml File und folgendem Code im Page_Load:

this.ddlKontogruppe.DataSource = (from k in db.Kontengruppens select new ListItem() { Text = k.kog_Name, Value = k.kog_Count.ToString() }).ToList();

Leider funktioniert selbst das nicht. ToList hat auch in meinem ersten Query keinen Unterschied gemacht.

Bug?

Thema: Von Linq direkt nach Listitem
Am im Forum: Datentechnologien

Ich loope halt über die Collection und adde die Einträge manuell. Bist du sicher, dass es bei dir geht? Bei mir geht es schon auch, aber der Value ist halt immer gleich wie der Text - auch wenn ich beim Value die ID des Datensatzes angebe und beim Text den Namen.

Wenn das bei dir wirklich geht, dann weiss ich echt nicht weiter. So viel kann man ja gar nicht falsch machen.

Thema: Von Linq direkt nach Listitem
Am im Forum: Datentechnologien

Da hier scheinbar (anscheinend?) keiner eine Ahnung hat lade ich euch alle zum wilden Spekulieren ein :)

Ist das ein Bug oder raff ich ein zugrundeliegendes Prinzip nicht?

Nachtrag: ich hab das jetzt halt anderst gelöst, was ja kein Problem ist. Aber es wäre halt schon khul so wie ich das wollte.

Thema: Von Linq direkt nach Listitem
Am im Forum: Datentechnologien

Hallo

Ich versuche gerade den totalen Dropdownlist-füll-overkill, indem ich folgendes versuche:

Me.ddlGruppe.DataSource = From g In db.Kontengruppens Select New ListItem(g.kog_Name, g.kog_Count)

Auf den ersten Blick hat das super funktioniert und ich bin begeistert. Allerdings habe ich dann gemekrt, dass der Value und der Text des Listitems immer derselbe ist. Sprich, in diesem Falle ist der Value der Name und nicht der Count.

Kann mir das jemand erklären?

Thema: Union von zwei Listen mit Linq will nicht
Am im Forum: Datentechnologien

naja.... Es fängt ja schon bei int? oder dim as nullable(of integer) an und geht dann so weiter. p => oder function(p) .

Den ? : Operator gibt es gar nicht und wie man unter VB.net eine Instanz einer Klasse erstellt und nach belieben im selben Befehl noch Properties auf füllt, weiss ich bis heute nicht.

Ich werde bei uns in der Firma ab und zu gerufen um ein CSharp Codeschnipsel nach VB zu übersetzen - auch wenn die anderen das natürlich auch könnten, würden sie sich mal kurz mit CSharp auseinandersetzen.

Thema: Union von zwei Listen mit Linq will nicht
Am im Forum: Datentechnologien

VB wird ja in der nächsten Version auch schöner (dann braucht es die _ nicht mehr für Zeilenumbrüche innerhalb eines Befehls), aber bei den CSharp jungs ist man schon kompetenter aufgehoben :D

Ausserdem kann man von CSharpern erwarten, dass sie VB lesen können - umgekehrt nicht unbedingt.

Gruss von einem verhinderten CSharper, der aber eh bald auf Kunst umsteigt ^^

Thema: Union von zwei Listen mit Linq will nicht
Am im Forum: Datentechnologien

lol

Kaum habe ich im Titel geschrieben "... von zwei Listen", da merke ich, dass ich ja wirklich Listen draus machen könnte, da ich - wie im Beispiel ersichtlich - bisher "nur" IQueryables hatte. Und siehe da: klappt.

Danke trotzdem :)

Thema: Union von zwei Listen mit Linq will nicht
Am im Forum: Datentechnologien

Hallo zusammen

Ich habe da grade wieder ein kleines Problem im Zusammenhang mit Linq to SQL.

In einem Tool von uns kann man "Besuche" speichern. Sobald ein Besuch gelöscht wird, kommt er aus der Tabelle "Besuch" raus in die "Besuch_Archiv" Tabelle (wieso auch immer nicht einfach ein Status gesetzt wird). Mein Auftrag ist es nun eine Suche über beide Tabellen hinweg zu realisieren.

Gelöst habe ich das mit zwei Abfragen, welche mir die Daten von jeweils einer der Tabellen holen. Danach werden die beiden per Union zusammengefügt, sortiert und ans Grid gebunden.

Um in beiden Abfragen den gleichen Typ zu haben (also keinen anonymen) habe ich mir eine Klasse erstellt, in die ich dann die Resultate per select new SuchResultat(...) speichere. Das Problem ist, dass die Archivtabelle zusätzlich die beiden Felder gelöschtAm und gelöschtVon enthält. Natürlich enthält meine SuchResultat-Klasse diese beiden Felder auch. Wenn ich nun aber folgendes mache, bekomme ich einen Fehler:


        Dim result = From b In besuche _
                     Select New Suchergebnis( _
                         b.b.BeBesuchsNr, _
                         ..., _
                         Nothing, _
                         Nothing)

        result = result.Union(From b In besuche_archiv _
                     Select New Suchergebnis( _
                         b.b.BeBesuchsNr, _
                         ...
                         b.b.BeGeloeschtVon, _
                         b.b.BeGeloeschtAm))

Der Fehler ist folgender: System.Data.SqlClient.SqlException: Alle Abfragen in einem Abfrageausdruck, die einen UNION-Operator enthalten, müssen gleich viele Ausdrücke in ihren Auswahllisten enthalten.

Hat jemand schon erfahrungen damit gemacht? Meiner Meinung nach sollte man die zwei Listen der Klasse SuchResultat doch zusammenfügen können, auch wenn ich im nicht genau die selben Werte dem Konstruktor übergeben.

Gruss
sra

Thema: Linq to SQL Performanceproblem
Am im Forum: Datentechnologien

Hallo Latino

Danke übrigens zunächst mal für deinen Support hier.

Wenn ich die Klasse direkt als new angebe, kann ich mir schon mal den foreach sparen, der die Resultate aus dem anonymen iqueryable in die Liste meiner klasse umgeschichtet hat.

Trotzdem habe ich noch eine Klasse erstellt, nur um die Daten anständig "zwischen"speichern zu können. Die Datenstruktur dieser Klasse (Datum, ArtikelName, Anzahl, KofferCode) brauche ich sonst nirgends. Wenn mir einen ganz normalen Linq Query erstelle, welcher mir die Daten in dieser Form zurückgibt (ohne Angabe einer Klasse), dann erstellt er mir ja automatisch einen anonymen Typen, auf welchen ich im folgenden zugreifen kann.
Speichere ich das Resultat des Query jedoch auf Klassenebene um von einer anderen Methode zugreifen zu können, dann weiss der Compiler die einzelnen Member nicht - ich kann diese also nicht weiterverwenden (zumal ich ja auch gar nicht weiss in welchen Typen ich casten müsste).

Gibt es eine Möglichkeit wie ich z.B. definiere, dass der Rückgabetyp eine aut. erstellte Klasse sein soll, die der Compiler dann auch kennt. Naja - wär vielleicht nicht so logisch, also gibt es das wahrscheinlich nicht, aber ich frage trotzdem mal ganz leise nach :)

Thema: Linq to SQL Performanceproblem
Am im Forum: Datentechnologien

Hallo Latino

Der generierte Query war echt eine Augenweide ^^
Zwar kann unser alter SQL Server hier noch kein Profiling (glaube ich), aber man kann sich ja den Query mit .toString in ein LogFile schreiben lassen.

Ich habe deinen Rat befolgt und den Linq Query in zwei Teile gesplittet. Der erste liest mir die Daten aus der DB in eine Liste und der zweite gruppiert diese dann so wie ich das will. Dauert zwar noch immer 2 Sekunden, aber damit kann ich leben.

Kleine Frage am Rande noch dazu:
Da ich für jede Woche ein Grid binde (innerhalb eines Repeaters), habe ich den ersten Query (bringt mir gleich die Daten für das ganze Jahr) nicht in der selben Funktion wie den zweiten der diesem noch das Wochenkriterium hinzufügt und gruppiert.
Da aber das Resultat der ersten Abfrage einen "neuen" anonymen Datentyp hervorbringt, kennt die zweite Funktion dessen Members nicht, auch wenn ich natürlich Zugriff habe. Ich habe mir deshalb eine Klasse gemacht, und habe das Ergebnis des ersten Queries per foreach in eine list<meinerKlasse> geadded. Gäbe es da eine elegantere Möglichkeit?

Thema: Linq to SQL Performanceproblem
Am im Forum: Datentechnologien

Hallo Allerseits

Ich mache für ein aktuelles Projekt eine statistische Auswertung der Anzahl verkaufter Produkte (Geschenkartikel) pro Koffer (die Artikel sind an Koffer "gebunden" und es intressiert mit welchem Koffer welche Artikel am ehesten weggehen).

Auf der DB Seite habe ich folgende Tabellen:
- BestellKopf
- BestellDetail (fk zu BestellKopf, fk zu GeschenkArtikel)
- GeschenkArtikel
- FakturaKopf (fk zu BestellKopf)

Die Abfrage sieht so aus:

From p In db.BestellungsDetails() _
Where p.Bestellung.Datum ≥ DatumVon _
And p.Bestellung.Datum ≤ DatumBis _
Group p By p.GeschenkArtikel.Gruppe Into Group _
Select _
    Produkt = Gruppe, _
    Braut = Group.Where(Function(g) g.Bestellung.Quelle = 1 And g.Menge > 0).Sum(Function(g) g.Menge), _
    Baby = Group.Where(Function(g) g.Bestellung.Quelle = 2 And g.Menge > 0).Sum(Function(g) g.Menge), _
    JuFa = Group.Where(Function(g) g.Bestellung.Quelle = 3 And g.Menge > 0).Sum(Function(g) g.Menge), _
    FTop = Group.Where(Function(g) g.Bestellung.Quelle = 5 And g.Menge > 0).Sum(Function(g) g.Menge), _
    Post = Group.Where(Function(g) g.Bestellung.Quelle = 6 And g.Menge > 0).Sum(Function(g) g.Menge), _
    INet = Group.Where(Function(g) g.Bestellung.Quelle = 7 And g.Menge > 0).Sum(Function(g) g.Menge), _
    ADM = Group.Where(Function(g) g.Bestellung.Quelle = 0 Or g.Bestellung.Quelle Is Nothing And g.Menge > 0).Sum(Function(g) g.Menge), _
    Total = Group.Sum(Function(g) g.Menge), _
    Ret = Group.Where(Function(g) g.Menge < 0).Sum(Function(g) g.Menge) * -1()

Wenn ich die so ausführe, dann dauert es ganz schön lange. Allerdings kann ich den generierten SQL Query anhand von Loadoptions schon einigermassen optimieren.


lo.LoadWith(Of Data.BestellungsDetail)(Function(p) p.Bestellung)
lo.LoadWith(Of Data.Bestellung)(Function(p) p.FakturaKopfs)
lo.LoadWith(Of Data.BestellungsDetail)(Function(p) p.GeschenkArtikel)

Trotzdem dauert die Abfrage noch sehr lange (x Sekunden), sobald ich statt des Rechnungsdatums (wie im query oben) das FakturaDatum nehme (also statt Where p.Bestellung.Datum ≥ DatumVon gibt es eben Where p.Bestellung.FakturaKopfs.FirstOrDefault.Datum ≥ DatumVon). Weiss jemand weiter? Wie kann ich Loadoptions über zwei Verknüpfungen hinweg definieren?

Ausserdem sollte ich in diesem Query noch irgendwie nachträglich ein WHERE auf die Sprache (im Bestellkopf) setzen können. Allerdings ist er natürlich zu dem Zeitpunkt schon gruppiert und hat das Sprachefeld nicht im Angebot. Zwei verschiedene Queries (für beide Sprachen) will ich aber vermeiden. Wie würded ihr da vorgehen?

Wäre sehr khul wenn sich jemand mit mehr Ahnung kurz Zeit nimmt.

Danke und gruss
sra

Thema: Linq macht Probleme bei Sum von Unterabfragen die keine Resultate haben
Am im Forum: Datentechnologien

Hallo Leute

Ich habe eine einfache Tabelle, in welcher Transaktionen von Artikeln gespeichert sind. Also Datum, ArtikelNr, Benutzer und Anzahl (sowohl positiv als auch negativ). Ich möchte eine nach Benutzer und Datum gruppierte Auflistung mit dem Datum auf der einen und Artikeltyp auf der anderen "Achse". Den Artikeltyp bestimme ich anhand der letzten Ziffer der ArtikelNr.

Um das zu erreichen, brauche ich unterabfragen in Linq, welche etwa so aussehen (wobei Group nicht der Befehl, sondern der Name der Gruppe ist - VB sei dank):

(From t2 In Group Where t2.Artikel.Name.EndsWith("01") Select t2.Anzahl).Sum()
Das Problem ist, dass der Sum Befehl zwangsläufig eine Exception wirft, wenn die Unterabfrage kein Resultat zurück bringt. Die Fehlermeldung lautet: Der NULL-Wert kann keinem Element vom Typ "System.Int32" zugeordnet werden, der keine NULL-Werte zulässt.
Allerdings habe ich die "Variable" nicht (und damit auch nicht als Integer) definiert in die das Resultat abgelegt werden soll.

Hier mal der ganze Code:


            Dim stat = From t In data.KofferTransaktions _
                       Group By t.fk_Hostess, t.Datmut Into Group _
                       Select New With { _
                            .Hostesse = fk_Hostess, _
                            .Datum = Datmut, _
                            .Braut = (From t2 In Group Where t2.Kofferserie.Name.EndsWith("01") Or t2.Kofferserie.Name.EndsWith("02") Or t2.Kofferserie.Name.EndsWith("07") Select t2.Anzahl).Sum(), _
                            .Baby = (From t2 In Group Where t2.Kofferserie.Name.EndsWith("03") Or t2.Kofferserie.Name.EndsWith("04") Or t2.Kofferserie.Name.EndsWith("08") Select t2.Anzahl).Count(), _
                            .JuFa = (From t2 In Group Where t2.Kofferserie.Name.EndsWith("05") Or t2.Kofferserie.Name.EndsWith("06") Select t2.Anzahl).Count(), _
                            .FTop = (From t2 In Group Where t2.Kofferserie.Name.EndsWith("15") Or t2.Kofferserie.Name.EndsWith("16") Or t2.Kofferserie.Name.EndsWith("17") Select t2.Anzahl).Count() _
                        }
hat jemand eine Idee?

Thema: Linq sortieren - OnSorting
Am im Forum: Datentechnologien

Hallo Forum

Ich bin seit kurzem daran Linq (vorwiegend To Sql - ich hoffe ich bin damit im richtigen Forum) in meinen Projekten zu gebrauchen, bin aber bereits relativ schnell an die erste Hürde gestossen. Und zwar habe ich Probleme mein (ASP.NET) Gridview zu sortieren, weil ich nicht die LinqDatasource einsetze.

Im Moment sieht mein Code so aus, dass ich im Page_Load direkt einen Query an die Datasource des Gridviews haue.


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not Me.IsPostBack Then
            Me.btnFilterAnwenden_Click(Me, Nothing)
        End If
    End Sub

    Protected Sub btnFilterAnwenden_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnFilterAnwenden.Click
        Dim msgs = Nachrichten.GetNachrichten
        If Not Me.ckFilterTypAllgemein.Checked Then msgs = msgs.Where(Function(p) p.Typ <> 1)
    ...
        Me.grdNachrichten.DataSource = msgs
        Me.grdNachrichten.DataBind()
    End Sub
sry, wegen VB - eure Antworten und Beispiele dürfen gerne auch in csharp sein, aber das Geschäft...

Naja - jedenfalls klappt das soweit (auch mit den Filtern) tiptop. Nachricht.GetNachrichten bringt ein IQueriable<Nachricht> zurück, das schon so gefiltert wurde, dass nur die eigenen Nachrichten drin sind. Achja - function(p) ist die VB Variante von p =>.

Wie muss ich nun vorgehen, um das Gridview sortiert zu bekommen? Ich habs folgendermassen versucht:

    Protected Sub grdNachrichten_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grdNachrichten.Sorting
        Dim msgs = Nachrichten.GetNachrichten
        If e.SortDirection = SortDirection.Ascending Then
            If e.SortExpression = "fk_Absender" Then msgs.OrderBy(Function(p) p.fk_Absender)
            ...
        Else
            If e.SortExpression = "fk_Absender" Then msgs.OrderByDescending(Function(p) p.fk_Absender)
            ...
        End If
        Me.grdNachrichten.DataSource = msgs
        Me.grdNachrichten.DataBind()
    End Sub

Mir ist klar, dass das noch nicht ganz koscher ist, falls denn ein Filter gesetzt gewesen wäre, dass dieser den Sort nicht überlebt, aber auch das mit dem Sort klappt nicht. Ausserdem wäre eine Variante wünschenswert, in der man der .OrderBy Methode einen String statt eines Lambdas übergeben könnte (oder einen Lambda anhand des Strings dynamisch generieren).

Wäre echt für Hilfe dankbar - finde dazu nichts was ich auch verstehe (da ich mich noch zu wenig mit anonymen Methoden / Lambda Expressions und Linq Expression Trees auseinandergesetzt habe).

Vielen Dank
Gruss
sra

Thema: Registerclientscriptblock und Scriptmanagerproxy
Am im Forum: Web-Technologien

Du hast mich ertappt

Habe ein kleines Demoprojekt gemacht um den Fehler zu reproduzieren, und konnte das nicht.

Der Fehler war nicht verursacht durch die Umstellung auf die Masterpage, sondern auf den Redirect. Den habe ich letzte Woche eingebaut und demnach nicht getestet (sonst nicht meine Art).

Also - alle die diesen Post lesen: Es gibt keinen Unterschied in der Handhabung von Registerclientscriptblock bei Scriptmanager und Scriptmanagerproxy!

Gruss
sra

Thema: Registerclientscriptblock und Scriptmanagerproxy
Am im Forum: Web-Technologien

Hallo Peter

Danke für den nütlichen Input. Ich habe tatsächlich Firefox bisher noch nie für Javascript benutzt, sondern halt nur für css.

Der Fehler war aber woanders zu suchen. Ich hatte nach dem obigen Code (erste Zeile) einen Response.Redirect drin.
Mit dem Scriptmanager direkt im Form, wurde der Redirect erst ausgelöst, wenn ich das Javascript Alert weggeklickt hatte. Mit dem Scriptmanager in der Masterpage verhält es sich nicht so. Ich kann mir dies zwar nicht restlos erklären (schliesslich dürfte doch der Scriptblock mit meinem Alert nach wie vor direkt am Anfang der Seite gerendert werden), aber wenn ich drauf verzichte funktionierts halt

Gruss
sra

Thema: Registerclientscriptblock und Scriptmanagerproxy
Am im Forum: Web-Technologien

Hallo

Um dem benutzer Serverseitig generierte Mitteilungen in einem asynchronen Postback zu zeigen, benutze ich die Methode ScriptManager.RegisterClientScriptBlock. Hat bis jetzt immer sehr gut geklappt. Nun habe ich aber das Design vereinheitlicht und setze daher auf Masterpages, was vorher nicht der Fall war.

Daher habe ich auch keinen Scriptmanager mehr direkt auf der Seite sondern einen Scriptmanagerproxy (den Scriptmanager natürlich in der Masterpage). Updatepanels und alles andere funktioniert genau gleich wie vorher, nur meine Mitteilungen werden nicht mehr ausgegeben. Irgendwie bringt mich google in dieser Sache nicht weiter, denn alles was da vorgeschlagen wird will nicht klappen.

hier mal was ich versucht habe:

            // Hat vorher geklappt
            ScriptManager.RegisterClientScriptBlock(Me.Page, Page.GetType(), Guid.NewGuid.ToString(), "alert('" & notfound & "');", True)
            // Klapp beides nicht
            ScriptManager.RegisterStartupScript(Me.Page, Page.GetType(), Guid.NewGuid.ToString(), "alert('" & notfound & "');", True)
            ScriptManagerProxy.Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), Guid.NewGuid.ToString(), "alert('" & notfound & "');", True)

Hat jemand schon ähnliche Erfahrungen mit dem Scriptmanagerproxy gemacht und weiss wies geht?

Thema: Subsonic Klasse ableiten - Collection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich habe als Test die Produkt-Klasse abgeleitet und nichts überschrieben, sondern nur eine zusätzliche Property gemacht, die sich aus zwei anderen (schon bestehenden) Properties zusammensetzt - so einfach wie möglich für den Test.

Danach habe ich versucht in einer Schleife über die "alte" ProduktCollection jeweils das Produkt in ProductExtendet zu casten, was zu einer InvalidCastException führt.

Wenn ich das richtig im Kopf habe, darf das ja auch gar nicht funktionieren, weil du immer auf die Basisklasse casten kannst, aber von der Basisklasse nicht auf die geerbte. Somit müsste ich imho eine eigene ProduktCollection machen, die von der echten ProduktCollection erbt, und deren Item Eigenschaft überschreiben.

Und genau hier weiss ich nicht weiter, weil die von Subsonic Generierte ProduktCollection Klasse sieht genau so aus:


	/// <summary>
	/// Strongly-typed collection for the SitzungsTermin class.
	/// </summary>
	[Serializable]
	public partial class ProduktCollection : ActiveList<Produkt, ProduktCollection> 
	{	   
		public ProduktCollection() {}

	}

nicht mehr, nicht weniger.

Ich werd noch ein bisschen probieren - mir ist da grad ne Idee gekommen. In der Zwischenzeit bin ich um Hilfe froh

Thema: Subsonic Klasse ableiten - Collection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo

Ich arbeite für ein bereits älteres Projekt, in dem wir für die DAL Subsonic einsetzen. Bisher habe ich die Klassen der DAL über partielle Klassen erweitert, so dass ich einige eigene Eigenschaften hatte, die nicht in der Datenbank wiedergegeben werden. Das klappte sehr gut.

Nun haben wir die DAL in ein eigenes Projekt gesteckt (Hintergrund: wir arbeiten neu mit WCSF) und in der Folge davon, kann ich meine partiellen Klassen nicht mehr brauchen, weil diese keine Klassen erweitern dürfen, die nicht im selben Projekt stecken.

Kurzum: Neu muss ich von der Subsonic Klasse ableiten bzw. erben um meine Eigenschaften da rein zu kriegen. Nun habe ich in der Theorie das schon gemacht, aber bei den Subsonic Klassen sieht es ein bisschen anders aus. Und zwar ist mein grosses Problem, dass diese Klassen aus einer "Produkt"-Klasse und einer "ProduktCollection"-Klasse bestehen und ich wahrscheinlich beide ableiten muss. Ich will aber nur minimale Änderungen im "Produkt" und in der Collection davon soll alles beim alten bleiben.

Wie muss meine abgeleitete Collectionklasse aussehen und was muss ich evt. noch machen, dass die Funktionalität weiterhin bestehen bleibt (DB Abfrage, speichern etc)