2009-03-26 20 views
0

Ich habe ein Problem, das mich nur tötet. Eines meiner CSLA-Objekte (sagen wir Parent) hat viele Kinder (nennen wir sie Children - eine Liste von Child). Parent ist ein editierbarer Stamm (BusinessBase) und Children ist eine bearbeitbare untergeordnete Liste (BusinessListBase) und Child ist bearbeitbarer Child.Dynamische LINQ & CSLA BusinessListBase

Was ich versuche zu tun, ist dies zu tun: Parent x = Parent.GetParent (id); IQueryable y = Parent.MyChildren.OrderBy ("Alter DESC");

In der Theorie sollte y dann mit einer Sammlung von Kindern gefüllt werden, die absteigend nach ihrem Alter sortiert sind (unter der Annahme, dass "Age" eine Eigenschaft des Child-Objekts ist).

Aber was ich bekam ist, dass y.Count() = 0. Obwohl, wenn ich ein Parent.MyChildren.Count() mache, gibt es nicht 0. Ist das ein Fehler in Dynamic LINQ oder CSLA? Dies (der Fehler) passiert nicht in der readonly Liste für mich.

Hilfe! Joe

Antwort

1

Joe,

Hier ist ein Hinweis, der helfen könnte. Dein Kommentar über den Unterschied zwischen einer editierbaren Liste und einer readonly Liste hat mich neugierig gemacht, also habe ich ein wenig tiefer gegraben.

Basierend auf dem, was ich aus dem CSLA 3.5-Code erfahren konnte, implementiert BusinessListBase IQueryable (tatsächlich ist es "C" im CSLA-Code, wie in "Child"). Die ReadOnlyListBase-Klasse tut dies nicht.

Das kann beeinflussen, welche Dynamic LINQ OrderBy-Erweiterungsmethode aufgerufen wird (es gibt zwei), und die für IQueryable ruft einfach die Version von OrderBy für das reguläre IQueryable auf.

Wenn Sie andererseits der Spur von IQueryable in BusinessListBase folgen, delegiert die Provider-Eigenschaft (des Typs IQueryProvider) an den CslaQueryProvider.

public IQueryProvider Provider 
{ 
    get { 
    return new Linq.CslaQueryProvider<T, C>(this); 
    } 
} 

Das alles zu sagen, mit der begrenzten Zeit, die ich verbringen musste, denke ich einzutauchen weiter (mit einem Debugger, duh!) In das CSLA LINQ Zeug ist wahrscheinlich gerechtfertigt. Von anderen Diskussionen und Follow-up an anderer Stelle, sah ich, dass Sie auch auf einen Bug/Problem hingewiesen für CSLA aufgezeichnet. Hier ist der Link:

CSLA Issue ID 326 - OrderBy should return a LinqBindingList that works with Bound Grids

Mein Verdacht ist, dass es mehr mit BusinessListBase Implementierung von IQueryable als etwas anderes zu tun. Und wieder sieht es nicht so aus, als ob ReadOnlyListBase IQueryable implementiert, entweder direkt oder über Vererbung (in meiner Kopie von CSLA 3.5).

Hoffe, dass hilft.

Jeff Miller

+0

Ja, es scheint, als wäre es ein Fehler bei der Implementierung von IQueryable durch CSLA. Ich werde das Problem verfolgen und versuchen, einen Codevergleich mit Version 3.6 zu machen. Ich benutze auch eine Version von CSLA 3.5. –