Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: C# und .NET ::  Datasource an List<T> binden  
Gehen Sie zu Seite Zurück  1, 2, 3  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 2588
Beitrag Th69 Mitglied 13:19:30 29.03.2012   Titel:              Zitieren

Anonyme Klassen kannst du nicht über Methodengrenzen hinweg zurückgeben, d.h. du mußt dir eine Klasse (XXX) definieren und dann entsprechend IEnumerable<XXX> zurückgeben.
Dravere
Moderator

Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
Beitrag Dravere Moderator 14:01:04 29.03.2012   Titel:              Zitieren

Th69 schrieb:
Anonyme Klassen kannst du nicht über Methodengrenzen hinweg zurückgeben, d.h. du mußt dir eine Klasse (XXX) definieren und dann entsprechend IEnumerable<XXX> zurückgeben.

Das ist so nicht ganz korrekt. Es gibt seit C# 4.0 das Schlüsselwort dynamic. Dieses kann man auch als Rückgabewert oder als Generictype Parameter verwenden.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;

 
public class Program
{
  public static IEnumerable<dynamic> Test()
  {
    yield return new
    {
      Test = "Hello"
    };
  }
 
  public static void Main(string[] args)
  {
    foreach(var obj in Test())
    {
      Console.WriteLine(obj.Test);
    }
  }
}

Man sollte sich allerdings bewusst sein, dass sich dies negativ auf die Performance auswirken kann. Ist somit mit Vorsicht zu geniessen ;)

Grüssli

_________________
Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
Sonnenlichtfee
Unregistrierter




Beitrag Sonnenlichtfee Unregistrierter 15:40:43 29.03.2012   Titel:              Zitieren

Danke mit dem Hinweis mit dynamic werde ich morgen mal testen.

Beim Googeln bin ich auf CopyToDataTable gestossen.
Damit sollte ich doch die Linq Abfrage einer DataTable übergeben können und diese dann an ein GridView binden können?!

Dazu habe ich gesehen, dass System.Data.DataSetExtension eingefügt werden muss.
Den Verweis dazu kann ich auch unter Verweise in meinem Projekt sehen, über using kann ich es aber nicht einbinden. An was kann das liegen?
Sonnenlichtfee
Unregistrierter




Beitrag Sonnenlichtfee Unregistrierter 13:13:40 30.03.2012   Titel:              Zitieren

Edit by Dravere:
Der folgende Teilbeitrag wurde bei einer Abtrennung ebenfalls entfernt
Dravere schrieb:
@Sonnenlichtfee,
Hast du die richtige Version eingebunden? Zum Teil gibt es Probleme, wenn man die falsche DLL Version von System.Data.DataSetExtension einbindet. Also zum Beispiel die Version für .Net 3.5 in einem .Net 4 Projekt probiert zu verwenden.

Edit End

--------------------------------------

Auf dem PC wird .Net 4 verwendet.
Im VS wird beim Verweis die Version v4.0.30319 angegeben - eine andere kann ich auch nicht finden.
Dennoch kann ich using System.Data.DataDataSetExtension; nicht einbinden.

Gibts dafür noch andere Voraussetzungen, dass es eingebunden werden kann?


Zuletzt bearbeitet von Dravere am 22:11:51 30.03.2012, insgesamt 1-mal bearbeitet
Dravere
Moderator

Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
Beitrag Dravere Moderator 14:06:03 30.03.2012   Titel:              Zitieren

@Sonnenlichtfee,
Oh, moment, moment, mein Fehler ...

Die System.Data.DataSetExtension.dll legt ihre Objekte ja im System.Data Namensraum ab. Es gibt keinen System.Data.DataSetExtension Namensraum! Ich arbeite zu wenig mit DataSet zusammen, hatte ich gerade ganz vergessen :)

Siehe zum Beispiel:
http://msdn.microsoft.com ....... .datatableextensions.aspx
Zitat:
Namespace: System.Data
Assembly: System.Data.DataSetExtensions (in System.Data.DataSetExtensions.dll)

Grüssli

_________________
Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
Sonnenlichtfee
Unregistrierter




Beitrag Sonnenlichtfee Unregistrierter 14:46:03 30.03.2012   Titel:              Zitieren

@Dravere
Jetzt hab ich zumindest das eigentlich Problem gefunden - denke ich zumindest

Für die Klasse aus dem Entity Framework (Befund) gibt es keine CopyToDataTable() Methode. Zumindest wird dies so nicht angeboten.
Müsste ich diese dann selbst schreiben?

C#:
IEnumerable<Befund> test =
                    from i in context.tblbefund.AsEnumerable()
                    select i;
 
    DataTable dt = test.CopyToDataTable();
    return dt;




Denn folgender Aufruf kennt die Methode dann doch (allerdings gibt es hier dann wieder ein Konvertierungsproblem)
C#:
IEnumerable<DataRow> test =
                    from i in context.tblbefund.AsEnumerable()
                    select i;
 
    DataTable dt = test.CopyToDataTable();
    return dt;


Falls selber schreiben, an was kann ich mich da orientieren, wie das aufgebaut sein soll?
Dravere
Moderator

Benutzerprofil
Anmeldungsdatum: 13.06.2005
Beiträge: 8178
Beitrag Dravere Moderator 18:24:14 30.03.2012   Titel:              Zitieren

Das ganze wird langsam unübersichtlich...

Was willst du eigentlich erreichen? Du redest weiter vorne davon, dass du es an ein GridView binden möchtest. Reden wir hier von WPF?
Möchtest du also die Resultate, welche du erhälst, in einem WPF GridView einer ListView anzeigen lassen?

Grüssli

_________________
Danke für die Hilfe, Antwort oder Meinung!
C++: Std-Lib Referenz
C# .Net: MSDN kennt die Antwort
Sonnenlichtfee
Unregistrierter




Beitrag Sonnenlichtfee Unregistrierter 22:08:51 30.03.2012   Titel:              Zitieren

Ich möchte einen Rückgabewert erhalten, den ich übergeben kann und dann an ein DataGridView (WinForms) hängen kann.

Bisher habe ich dazu immer eine DataTable zurück gegeben und diese dann als DataSource an das GridView gehängt.
Th69
Mitglied

Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 2588
Beitrag Th69 Mitglied 11:07:48 31.03.2012   Titel:              Zitieren

An die DataGridView.DataSource-Eigenschaft kannst du doch auch direkt eine List<XXX> o.ä. dranhängen - es muß ja keine DataTable sein.
Also in deinem Code einfach
C++:
return test.ToList();

verwenden.
Sonnenlichtfee
Unregistrierter




Beitrag Sonnenlichtfee Unregistrierter 10:08:34 02.04.2012   Titel:              Zitieren

@Th69
Danke für den Tipp - so klappt es!

Wenn ich allerdings nur einzelne Spalten selektieren möchte, bekommme ich schon wieder ein Konvertierungsproblem angezeigt.

C#:
select new { i.Befund, i.Bezeichnung };


Kann mir vielleicht jemand eine gute Seite zu Linq sagen oder hat jemand einen Buchtipp für mich?! Denke die Grundlagen in diesem Bereich fehlen bei mir total ...
c++.de :: C# und .NET ::  Datasource an List<T> binden  
Gehen Sie zu Seite Zurück  1, 2, 3  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.