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 Siedlerchr
Thema: Programmautomatisierung aus C# heraus ansprechen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Noch ein Tipp:

Versuch die COM- Komponente möglichst als TLB-Datei zu exportieren und über TLBImp in VS zu imporiteren , dann hast du den Vorteil das du deine Anwendung auf jedem Rechner kompilieren kannst, ohne das die COM Komponente installiert sein muss.

Type Library Importer (MSDN)

Thema: SortableBindingList + Virutal Mode im DGV + Sotierprobleme
Am im Forum: GUI: Windows-Forms

Genau das war mein Problem. Habe das Problem jetzt gelöst, in dem ich die Daten vorher nochmal in eine neue Liste übertrag und diese dann komplett ans DGV hänge.
So klappt es. Ist zwar performancemäßig nicht so toll, aber erstmal ein Anfang

Gruß
Siedlerchr

Thema: SortableBindingList + Virutal Mode im DGV + Sotierprobleme
Am im Forum: GUI: Windows-Forms

Zitat von FZelle
Was denn nun, Virtual mode oder DataSource, beides macht keinen sinn.

o.O - Hm, dann muss ich mich doch nochmal genauer einlesen. Ich hatte das bisher so verstanden, dass das Virtual Mode nur dann funktioniert, wenn ich auch ne DataSource habe und meine Items DataBound sind

Thema: SortableBindingList + Virutal Mode im DGV + Sotierprobleme
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich habe ne SortableBindingList an ein DGV gehängt. Das funktioniert auch soweit alles.
Das DGV ist im Virtual Mode und da kriege ich beim sortieren - teilweise- Fehlermeldungen:

Fehler
---------------------------
Standard-Fehlerdialogfeld für DataGridView
---------------------------
DataGridView-Ausnahme:
System.IndexOutOfRangeException: Der Index 6 hat keinen Wert.

bei System.Windows.Forms.CurrencyManager.get_Item(Int32 index)

bei System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex

Behandeln Sie das DataError-Ereignis, um dieses Standarddialogfeld zu ersetzen.


Das eiinzige was mir zu diesem Fehler einfällt, ist das das für jedes Element im DGV/Liste kommt, der IndexWert entspricht der Row.

Was vielleicht noch interessant ist: Die Liste die als DataSource am DGV hängt wird von einem Thread in 1000 Schritten befüllt und nach jedem Schritt wird die DataSource wieder auf die Liste gesetzt.

Hier noch mein CellValueNeeded Event:

private void dgvDeleteRuns_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            e.Value = allRuns[e.RowIndex];
        }




Wenn ich die Liste z.B: per Where einschränke und das Ergebnis als neue Liste ans DGV hänge (auch eine SortableBindingList), dann funktioniert das Sortieren einwandfrei....


Ich habe auch schon probiert. die LIste ans DGV als DataSource zu setzen, wenn alle Daten geladen sind. Aber da geht das sortieren ebenfalls nicht.

Hat jemand ne Idee warum das nur bei alllen nicht geht? Ich hab mit dem VirtaulMode noch nicht so viel Erfahrung gesammelt.

Thema: Properties-Reihenfolge soll in Klasse = Reihenfolge aus Interface sein
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

kann man die Reihenfolge der Properties zur Laufzeit festlegen. Ich habe eine Klasse die von einem Interface erbt. Egal wie ich die Properties jetzt in die Klasse einfüge, die Properties aus dem Interface sollen als erstes kommen und die Anordung soll auch gleich sein.

BNsp: Reihenfolge aus dem Interface


 public interface IRunInformation
    {
      Guid RunId { get; set; }
        decimal Count { get; set; }
}

Klasse

 public class CustomerRunInfo: IRunInformation
    {
 public string Name {get;set;}
  public  decimal Count { get; set; }
  public   Guid RunId { get; set; }

}

Wenn ich jetzt eine Liste vom Typ des Interfaces erstelle habe ich ja meien gewünschte Reihenfolge, wenn ich jetzt allerdings eine Liste vom Typ der Klasse Erstelle habe ich die Reihenfolge der Klasse, die anders ist als die des Interfaces.
Kann man sagen: Die Properties die vom Interface kommen sollen a) als erstes und b) in der Reihenfolge wie sie im Interface definiert sind?

Hintegrund ist das ich die beiden Listen an ein DGV mit DataSource hänge -> Die Spalten werden da ja automatisch erzeugt. Oder gibt es hier vielleicht ne Möglichkeit die Reihenfolge zu beinflussen?

Thema: Datagridview Column Resize - Spalten Breite ändern (datengebunden)
Am im Forum: GUI: Windows-Forms

Hallo,

ich kanns leider gerade nich testen, erst morgen wieder, aber ich meine das hängt mit der Eigenschaft AuoSize ( DataGridViewAutoSizeColumnMode) zusammen.

Wenn ich das auf MSDN richtig gelesen habe ist das Resizen bei dem Modus "AllCells" deaktiviert.
Ich verwende eigentlich immer Fill und habe damit auch bei DataBinding Geschichten bisher noch keine Probleme mit dem Resizen gehabt.

Nähere Infos gibt es hier:
MSDN: DataGridViewAutoSizeColumnMode-Enumeration

Ich würds ansonsten nochmal morgen früh testen, ansonsten einfach mal mit der Eigenschaft rumspieln. Wie gesagt, bei Fill hatte ich eig noch nie Probleme.

Thema: Datagridview Column Resize - Spalten Breite ändern (datengebunden)
Am im Forum: GUI: Windows-Forms

Zitat
Leider erscheint im Datagridview kein Pfeil um die Spaltenbreite von Hand anzupassen.

Für die Spaltenbreite gibt es keinen Pfeil, du klickst entweder Doppelt auf eine Spalte und der nimmt automatisch die Spaltenbreite oder du klickst zwischen zwei Spalten und kannst dann mit gedrückter
Maus die Spaltenbreite ändern.

Nicht verwechseln mit dem "Sort Glyph", dem Pfeil für die sortieren wie hier (siehe Anhang)



Das Sortieren geht nur bei Datenquellen die die Sort-Methode überschreiben, nähere Infos dazu gibt es hier:
MSDN: ColumnSortMode

Thema: Suche Tuts/Bücher/Tipps etc für Erstellen von Visual Studio (2010) Extensions
Am im Forum: Buchempfehlungen

Hallo zusammen,

ich bin auf der Suche nach mehren Tutorials/Bücchern etc in denen das Erstellen von Extensions für Visual Studio 2010 erklärt wird.

Ich habe bereits den Walkthrough von MSDN gemacht und mich dort ein wenig eingelesen, muss aber sagen, dass das jetzt nicht so hilfreich war...
Die API-Referenz ist leider auch ziemlich dürftig was das angeht...

Kennt da jemand noch Tutorials oder ggf Bücher oder hat Tipps/Empfehlen für das Erstellen von Visual Studio Extensions?

Möglichst wo das ganze mal irgendwie zusammenhängend beschrieben...

Thema: C# String in SQL Abfrage verwenden
Am im Forum: Datentechnologien

Ja das geht, in dem du den Benutzer einfach als Parameter und schickst ein Prepared Statement ab.

Vielleicht mal folgendes als Denkanstoß:



string qry = "select Name, Adresse  from Mitfahrzentrale.Benutzer where Benutzer.Name  = ?"

        OdbcCommand cmd = new OdbcCommand(qry, conn);
   cmd.Parameters.AddWithValue("user",Environment.UserName)
 var reader = reader = cmd.ExecuteReader())
while (reader.Read())
                    {
//Ergebnismenge durchlaufen und die Werte der Spalten abrufen...
}

Entweder baust du das ganze mit dem DataTable/DataSet oder du erstellt dir einfach eine Liste mit den Objekten und hängst die an das DGV.
Dazu gibt es hier jede Menge Infos.

Ich habe das in dem o.g. Beispiel mal über eine einfach ODBC-Abfrage gemacht, beim SQL Server wirst du vermutlich OleDbCommand oder ähnliches verwenden
Nähere Infos: MSDN: DBCommand

Thema: prozess eines bestimmten benutzers beenden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo,

auf Stackoverflow gibt es eine ähnliche Frage, in der auch Beispiele gepostet worden sind.
Vielleicht hiflt dir das ja weiter:
Stackoverflow - How do you kill a process for a particular user in .NET (C#)?

Thema: [erledigt] Problem mit TabIndex durch FlowLayoutPanel
Am im Forum: GUI: Windows-Forms

Hallo herbivore,

danke für die Antwort!

Zitat
Die absoluten Zahlen beziehen sich immer nur auf den jeweiligen Container

Ich hatte das anders in Erinnerung gehabt, ich war iwie davon ausgegangen das das pro Form/Window ist.
Habs jetzt mit einem TableLayoutPanel umgesetzt. Klappt jetzt mit der TabOrder

Thema: [erledigt] Problem mit TabIndex durch FlowLayoutPanel
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich hab ein kleines Problem mit der Tab-Reihenfolge meiner Controls.
Ich habe nen UserControl auf dem mehrere Textboxen und daneben jeweils einen Button.
Die Buttons sind untereinander auf einem FlowLayoutPanel angeordnet.

Ich habe die TabIndex-Werte entsprechend eingetrage, dass er von links nach Rechts gehen soll (Textbox-->Button).
Mein Problem ist jetzt, dass die Tab-Reihenfolge ignoriert wird, er springt von der 1. Textbox nicht zum Button, sondern auf die nächste Textbox in der nächsten Zeile.
Das FlowLayoutPanel hat in dem Fall einen TabIndex der größer als alle anderen sind.


Jetzt habe ich versucht dem FlowLayoutPanel den TabIndex 2 zu geben. Das klappt, er selektiert dann den 1. Button
Allerdings geht er jetzt in dem FlowLayoutPanel weiter von oben nach unten, er springt zum nächsten Button, obwohl in der TabOrder eigentlich die nächste TextBox kommen sollte.

Zur veranschaulichung habe ich mal einen Screenshot gemacht.
Frage: Wie kriege ich die TabOrder in die richtige Reihenfolge, sodass er von links nach rechts geht?

Thema: [erledigt] Expression.Call mit Methode String.Contains aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

die Lösung hatte ich auch schon, nur es hatte nicht bei mir funktioniert.
Ich habe den Fehler jetzt gefunden, es lag an dem

System.Type.EmptyTypes)

bei dem GetMethod. Wenn man das weglässt, dann funktioniert es.

Thema: [erledigt] Expression.Call mit Methode String.Contains aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich rufe per Expression.call auf und will dort die Methode string.Contains verwenden.
Mein Problem ist allerdings, wie ich contains die Parameter übergebe.
Das habe ich noch nicht raus bekommen. Ich habe mir die Expression.Call Überladungen auch schon angeschaut, sehe da aber nichts passendes.

Vielleicht hat ja von euch jemand eine Idee. Das wäre sehr hilfreich.

So sieht mein Code bisher aus, ich rufe die Methode ToUpper von string auf.

string constvalue = "TEST";
			Console.WriteLine ("Hello World!");

			List<User> users = new List<User> {  new User { UserLogin = "test", UserName = "ABC"}, 
												  new User{ UserName = "DEFG", UserLogin = "GHI"}};
		
			
			IQueryable<User> queryableData = users.AsQueryable<User>();
			
			ParameterExpression  p = Expression.Parameter(typeof(User),"s");
			ConstantExpression five = Expression.Constant(constvalue);
			
			Expression left = Expression.Property(p,"UserLogin");
			var exprToUpper =	Expression.Call(left,typeof(string).GetMethod("ToUpper", System.Type.EmptyTypes));
			
		   Expression e1 = Expression.Equal(exprToUpper,five);
			
	       MethodCallExpression whereCallExpression = Expression.Call(
                typeof(Queryable),
                "Where",
                new Type[] { queryableData.ElementType },
                queryableData.Expression,
                Expression.Lambda<Func<User, bool>>(e1, new ParameterExpression[] { p}));
		
	
			
			 IQueryable<User> results = queryableData.Provider.CreateQuery<User>(whereCallExpression);

Thema: Verschiedene .dll's von anderer Software einbinden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Schreib dir doch ne Batch Datei die vo dem Build (PreBuild Action) die DLLs in das passende Verzeichnis kpoiert.

Das ist doch am einfachsten

Thema: Verschiedene .dll's von anderer Software einbinden
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat
Kannst du mir noch sagen, was du mit %Path% meinst?

Er meint die Umgebungsvariable PATH, die du unter Systemsteuerung ändern kannst.

Tipp einfach mal in eine CMD das Wort "path" (ohne Anführungszeichen ein) und du siehst schonmal alles was da bisher drin steht.

Thema: [gelöst] Generic List - Dynamische Suche/Filter
Am im Forum: Datentechnologien

Hallo,

ich verwende bei mir folgende SortableBindingList

SortableBindingLIst

Interessant dabei dürfte für dich der Abschnitt hier sein:

private void CreateOrderByMethod(PropertyDescriptor prop, 
                 string orderByMethodName, string cacheKey) {

        /*
         Create a generic method implementation for IEnumerable<T>.
         Cache it.
        */

        var sourceParameter = Expression.Parameter(typeof(List<T>), "source");
        var lambdaParameter = Expression.Parameter(typeof(T), "lambdaParameter");
        var accesedMember = typeof(T).GetProperty(prop.Name);
        var propertySelectorLambda =
            Expression.Lambda(Expression.MakeMemberAccess(lambdaParameter, 
                              accesedMember), lambdaParameter);
        var orderByMethod = typeof(Enumerable).GetMethods()
                                      .Where(a => a.Name == orderByMethodName &&
                                                   a.GetParameters().Length == 2)
                                      .Single()
                                      .MakeGenericMethod(typeof(T), prop.PropertyType);

        var orderByExpression = Expression.Lambda<Func<List<T>, IEnumerable<T>>>(
                                    Expression.Call(orderByMethod,
                                            new Expression[] { sourceParameter, 
                                                               propertySelectorLambda }),
                                            sourceParameter);

        cachedOrderByExpressions.Add(cacheKey, orderByExpression.Compile());
    }

Zitat
In a Nutshell

If, for instance, you create a MySortableBindingList<Sale> and sort on the Customer property, an expression that conceptually looks something like Enumerable.OrderBy<Sale>(originalList, a => a.Customer) will be created and used to do the sorting.

Das könnte doch eigentlich genau das sein was du brauchst. Der Code erzeugt dynamisch eine Lambda Expression, wenn ich das richtig verstanden habe und sortiert dann damit.

Thema: [gelöst] Generic List - Dynamische Suche/Filter
Am im Forum: Datentechnologien

Eine normale BindingLst kannst du im DGV aber nicht sortieren. Hatte vor kurzem das selbe Problem.
Für das Sortieren über das Datagrid brauchst du eine SortableBindingLIst wie z.B. Hier:
Sortable BindingList

Für das Filtern würde ich mir mal folgendes anschauen, das erzeugt dynamisch eine Filteroberfläche mit allen Spalten.

Dynamic DataGridView filtering in C#

Das jeweilige Filtern habe ich dann für alle Spalten jeweils einzeln gemacht.

 userList =
                                    new SortableBindingList<Benutzer>(
                                        userList.Where(x => x.Name1.ToUpperInvariant().StartsWith(
                                            f1.Value.ToUpperInvariant())));
                                dgvData.DataSource = userList;

Da hatte ich auch keine gescheite Lösung für gefunden.

Hoffe das bringt dich vielleicht schonmal etwas weiter.

//Edit: Link korrigiert

Thema: Datagridview Zeile mit Browse Button - Button nur für eine Spalte
Am im Forum: GUI: Windows-Forms

Hi,

ich habe da mal mit deinen Vorschlägen rumgetestet, funktioniert so leider nicht.
Zum einen werden da wieder für alle die Buttons angezeigt und zum Anderen wird der Button jeweils nur so halb angezeigt.

Ich habe mir jetzt nen Workaround geschaffen:


   if  (dgvProjectInfo.CurrentCell.OwningColumn == dgvProjectInfo.Columns["ProjectInfoProjectCode"])
            {
                ShowProjectCodesWithButton(dgvProjectInfo);
            }
            else
            {
dgvProjectInfo.EditingPanel.Controls.RemoveByKey("btnProjectCodes");
 
            }


So entferne ich einfach den Button bei den Spalten bei denen ich den nicht benötige, bei der anderen Spalte erzeuge ich ihn dann neu.

Thema: Datagridview Zeile mit Browse Button - Button nur für eine Spalte
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich habe folgendes praktisches gefunden:
DataGridView-Zelle mit Browse-Button
Dort wird in einer Zelle ein Browse Button hinzugefügt.
Die relevante Stelle ist die hier:

 void dgv_EditingControlShowing(object sender,DataGridViewEditingControlShowingEventArgs e)
    {
      if (dgv.CurrentCell.ColumnIndex != dt.LinkColumn.Ordinal) return;
      Button btn = new Button(); btn.Dock = DockStyle.Right;
      btn.Name = "btnOpen"; btn.Text = "..."; btn.Width = 25;
      if (!dgv.EditingPanel.Controls.ContainsKey(btn.Name))
        dgv.EditingPanel.Controls.Add(btn);
      btn.Click += new EventHandler(btn_Click);
      btn.BringToFront();
    }
Das funktioniert soweit
Allerdings wird mir dieser "Browse Button" für jede Spalte angzeigt, obwohl nicht beabsichtigt.

Ich habe das auch schon mit anderen Events wie CellEnter oder CellClick getestet und dort die Spalte abgefragt, aber er fügt es trotzdem für jede Spalte ein.
Besteht die Chance, das man das hinbekommt, dass das nur bei 1 Spalte angezeigt wird?

Thema: VS Aus bestimmten Klassen eigene DLL erzeugen (für PluginSystem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Danke das ist genau das was ich gesucht habe!

Thema: VS Aus bestimmten Klassen eigene DLL erzeugen (für PluginSystem)
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo zusammen,

gitb es in Visual Studio die Möglichhkeit zu sagen, dass ich jeweils bestimmte Klassen (die ein Plugin-Interface implementieren) in jeweils eine eigene DLL haben will?
Bislnag erzeugt Visual Studio ja für jedes Projekt eine DLL.
Ich hätte aber gern eine DLL pro Klasse.


Ich habe bisher nur die Möglichkeit das per Kommandozeile zu machen wie hier beschrieben:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs

MSDN: Erstellen einer DLL

Gibt es da noch die Möglichkeit das direkt in Visual Studio einzustellen, dass bestimmte Klassen in je eine eigene DLL erzeugt werden?

Thema: Interface basierte Programmierung
Am im Forum: Buchempfehlungen

Also such einfach mal nach IoC und Depency Inejction bei Google, da findest du jede Menge frei verfügbare Informationen: Einen guten Einstieg bietet das Tutorial bei Ninject (ein Container für Depency Injection)


Dependency Injection By Hand

Thema: Wie Änderungen an gefilterter BindingList an die ursprüngliche Collection übergeben?
Am im Forum: GUI: Windows-Forms

Ja das sieht nach einer relativ guten Lösung aus, das könnte genau das sein was ich brauche..


Danke erstmal für den Tipp.

Thema: Wie Änderungen an gefilterter BindingList an die ursprüngliche Collection übergeben?
Am im Forum: GUI: Windows-Forms

Danke erstmal für die Antworten, aber ich glaube ich habe mich evtl ein wenig unklar ausgedrückt:

Ich beutze eine LINQ Abfrage mit select NEW zum Abfragen von Daten aus der eigentlichen Liste. Die kann ich aber nicht als DataSource nehmen, weil ich dann nicht die Daten in der "schönen" Form habe wie hier.
Letzendlich geht es mir nur um die Anzeige, es sind keine weiteren daten die hinzugefügt werden oder so, die Daten die ich Abfrage sind alle in der

   var qry = (from myacc in accList //Ursprungsliste
                       select new AccountHosterView
                       {
                           Hostername = myacc.Hoster.Name, //Hoster ist ein Eigenes Objekt das einem Account objekt zugeordnet wird

                           Username = myacc.Username,
                           Password = myacc.Password,
                          ........

                       }).ToList();

Als Datasource des DGV habe ich dann derzeit eine BindingList vom Typ BindingList<AccountHosterHiew>.
Ichn suche im Prinzip eine Möglichkeit, dass wenn ich im DGV was ändere an der Anzeige, die dahinterliegenden Daten mitgeändert werden.
Denn wenn ich jetzt z.B. was ändere im DGV dann würde die Änderung ja nur in der BindingList statfinden und nicht in der eigentlichen Account Liste.


Wie würd ich sowas hinbekommen oder ist mein ansatz evtl falsch?

Thema: Wie Änderungen an gefilterter BindingList an die ursprüngliche Collection übergeben?
Am im Forum: GUI: Windows-Forms

Danke erstmal für die schnelle Antwort. Könntest du etwas konkreter werden wie du das genau meinst oder vielleicht mal nen Bsp. Ansatz zeigen?
Ich kann das so noch nicht nachvollziehen wie du das meinst.

Thema: VS2010 + SP1 - Quellcodefenster friert immerzu ein
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Es gibt zusätzlich in den Optionen auch noch die Möglichkeit "Umfassende visuelle Clientdarstellung" zu aktivieren/deaktivieren.

Das hat bei mir auf meinem Netbook jedenfalls ein bisschen Performance gebracht...

Thema: Wie Änderungen an gefilterter BindingList an die ursprüngliche Collection übergeben?
Am im Forum: GUI: Windows-Forms

Hallo,

ich habe mal ne Frage bezüglich dem Mitgeben von Änderungen einer Collection an eine Andere.

Ich habe ne Liste von Objekten vom Typ A. Derzeit habe ich es aber so dass ich auf diese Liste eine LINQ Abfrage mache, das ganze in ein BindingList und das als DataSource im DGV angebe.

Die Änderungen werden ja jetzt auch schön in die BindingList übernommen. Meine Frage ist jetzt, wie kriege ich die Änderungen der BindingList am Besten mit der eigentlichen Collection synchronisiert kriege.

Jetzt habe ich mich mal ein bisschen schlau gemacht und gefunden zum einen das ListChanged Ereignis und zum Ändern das INotifyPropertyChanged der Objekte in der Liste. Was mir jetzt nicht so ganz klar ist, wie ich dann die andere Urprungscollection aktualisiere. Wie würde man sowas umsetzen?
Oder gibt es vielleicht nen anderen Ansatz um das zu lösen

Thema: [erledigt] Frage zu DefaultIfEmpty mit First() bei IEnumerable
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielen vielen dank, es macht genau das was es soll.

Jetzt bin ich mir nur noch nicht ganz sicher, ob ich richtig verstanden habe wie das abläuft:

Also zuerst wird für die Elemente der Collection die erste Bedinung in der Estension Method mit dem "orgininalem" FirstOrDefault ausgewertet, ob die erfüllt ist oder nicht, dann wird ggf. die DefaultMethode aufgerufen.

Und das Func<T> ist doch letzendlich ne Art von delegate der dann auf eine Methode zeugt oder?

Thema: [erledigt] Frage zu DefaultIfEmpty mit First() bei IEnumerable
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich habe da mal ne Frage bezüglich DefaultIfEmpty() bei einem IEnumerable im Zusammnenhang mit First()

Ich habe hier eine Methode die mir den ersten Wert einer Liste geben soll oder bei NULL einen neuen erzeugen (GetNewEmptyFreeAccount)
bei accList handelt es sich um ein List<IAccount> Objekt.


 public IAccount GetFirstActiveAccount(string hoster)
        {

            var acc = accList.Where(x => x.Hoster.Name == hoster && x.Active == true).DefaultIfEmpty(GetNewEmptyFreeAccount(hoster)).First();
            return acc;
        }

Das Problem ist jetzt, dass, obwohl etwas enthalten ist, der die Methode aus DefaultIFEmpty aufruft.
Wenn ich das richtig verstanden liegt das hieran:
Zitat von Enumerable.DefaultIfEmpty Abschnitt Hinweise
Diese Methode wird mit verzögerter Ausführung implementiert. Der Wert der sofortigen Rückgabe ist ein Objekt, in dem alle zum Ausführen der Aktion erforderlichen Informationen gespeichert werden. Die von dieser Methode dargestellte Abfrage wird erst ausgeführt, wenn das Objekt entweder durch den direkten Aufruf der zugehörigen GetEnumerator-Methode oder mithilfe von foreach in Visual C# oder For Each in Visual Basic aufgelistet wird.

Meine Frage ist jetzt, kann ich das irgendwie umändern, sodass es funktionieren würde wie ich es mir vorstelle?
Also dass das DefaultIfEmpty die Methpode nicht jedesmal aufruft, sondern wirklich dann wenn die Collection leer ist?
Was muss ich dafür machen, habe schon überlegt aber mir ist noch kein Gedanke gekommen...