| Autor |
Nachricht |
Th69
Mitglied
Benutzerprofil
Anmeldungsdatum: 25.03.2008
Beiträge: 2588
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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 ... |
|
|
|
 |