Laden...

Linq dynamisches Ergebnis als Parameter an Methode übergeben

Erstellt von Cornflake vor 7 Jahren Letzter Beitrag vor 7 Jahren 3.455 Views
C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren
Linq dynamisches Ergebnis als Parameter an Methode übergeben

verwendetes Datenbanksystem: C# 4.6.1 Linq

Hallo

Befehle wie:


...
var erg = from z in quelle
               where z[1].Length > 1
               select new  { z[0], z[2]  };
...

sind ja äußerst praktisch.

Aber wie kann ich "erg" als Parameter an eine andere Methode übergeben?

Problem:
Ich habe habe eine Methode in der Dateien als Tabellen eingelesen werden, dann mit 3 Linq Befehlen vorbereitet werden und dann für 2 Ausgaben wieder mit Linq ähnlich oben geändert werden. Inzwischen müssten da noch mehr Ausgaben per Linq erzeugt werden. Nur in einer Methode finde ich das zu unübersichlicht. Daher aus:


Auswerten(){...}

...soll jetzt werden:


Auswerten_Eingabe(){...}
Auswerten_Vorbereitung(tabelle1,tabelle2){...}
Auswerten_Ausgabe(tabelle,Filter){...}

Nur wie kann ich da die Linq Tabellen übergeben?

Beste Grüße
Cornflake

2.090 Beiträge seit 2012
vor 7 Jahren

Bis VS2015: garnicht
Ab VS2017 werden auch die C#7-Features unterstützt. Da sind dann auch die Tuples mit dabei, mit denen geht das.

Wenn Du nicht umsteigen kannst/darfst, dann kommst Du nicht drum herum, irgendein anderes Datenformat zu nutzen.
Entweder Du baust eine Klasse dafür oder Du nimmst dynamic.
Ich würde die Klasse empfehlen.

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

3.170 Beiträge seit 2006
vor 7 Jahren

Hallo,

solange Du mit anonymen Typen arbeitest (new { z[0], z[2] }) geht das nur, wenn Du das Ergebnis als dynamic übergibst.
Oder Du erstellst einen eigenen Typen, dann ist das Ergebnis einfach ein IEnumerable<DeinSchönerTyp>, und kann auch so übergeben werden.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Wegen dynamic werde ich mal googeln thx 😃.

Ansonsten freue ich mich eh schon auf den 7.3.17

2.090 Beiträge seit 2012
vor 7 Jahren

Ansonsten freue ich mich eh schon auf den 7.3.17

Kannst/Darfst Du Visual Studio 2017 und auch die C#7-Features nutzen?

Ich arbeite jetzt schon seit einigen Tage/ein paar Wochen damit und finde das durchaus gut gelungen.
Besonders das Feature, XAML zur Laufzeit anpassen zu können ist klasse. Es hat noch einige Kinderkrankheiten, aber für einfache Dinge wie Margins funktioniert das super.

Von daher würde ich sagen:
Warum warten? Einfach mal ausprobieren ^^

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Kannst/Darfst Du Visual Studio 2017 und auch die C#7-Features nutzen?

Ja. Hab mir aber noch nicht alle Details angeschaut.
Werde die neue Version wohl erst ab März testen können.
Bin u.a. auch schon auf die Tuples gespannt.

16.857 Beiträge seit 2008
vor 7 Jahren

Kleines Feedback:

C# 4.6.1 Linq

Das gibt es nicht. Es gibt .NET Framework 4.6.1.

Die C# Versionierung ist aber unabhängig vom .NET Framework.

5.658 Beiträge seit 2006
vor 7 Jahren

Hi Cornflake,

Bin u.a. auch schon auf die Tuples gespannt.

was hält dich davon ab, jetzt bereits explizit Tuples (oder eigene, spezifischere Typen) zu verwenden?

var erg = from z in quelle
               where z[1].Length > 1
               select new Tuple<int, string>(z[0], z[2]);

DoSomething(erg);


void DoSomething(IEnumerable<Tuple<int, string>> result)
{
  //...
}

Weeks of programming can save you hours of planning

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

@MrSparkle
Das .net 4.6.1 habe ich noch nicht so lange im Einsatz. Stimmt da gibts doch schon Tuples 8o. Hatte die bisher noch nicht gesehen/genutzt.
thx 😁

16.857 Beiträge seit 2008
vor 7 Jahren

Tuple als Klasse im Framework gibt es seit .NET 4.0 (seit 2010). Tuple als eigener Syntax ab C# 7.

C
Cornflake Themenstarter:in
142 Beiträge seit 2007
vor 7 Jahren

Hatte bisher VS2008 und .net 3.5 im Einsatz. Daher war das letztlich ein ziemlicher Sprung.