Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 16456|Antwort: 0

[ASP.NET] Erkläre die Rückgabe der Linq-föderierten Abfragetabellen-Ergebnismenge

[Link kopieren]
Veröffentlicht am 08.05.2015 16:34:23 | | |

In diesem Artikel stellt der Autor die Linq-Joint-Abfrage ausführlich vor, weil ich befürchte, dass die Leser diesen Aspekt einfach nicht sehr gut verstehen, daher werde ich, bevor ich über die gemeinsame Linq-Abfrage spreche, zunächst etwas Wissen für Sie darlegen und dann erklären, wie die Linq-Joint-Abfrage implementiert wird, in der Hoffnung, Ihnen weiterzuhelfen.

Zunächst wollen wir einige Wissenspunkte der Linq-Joint Query verstehen.

1. Anonyme Art der Zustellung



statisches Void Haupt(string[] args)   
{ var User = GetAnonymous(). Cast(new { BenutzerName = "", LastLoginIp = "" });           
   Console.Write(Benutzer.Benutzername);      
}         
statisches Objekt GetAnonymous()     
{ var User = new { UserName = "yaosansi", LastLoginIp = "127.0.0.1" };         
      zurück Benutzer;     
}
Wenn wir einen anonymen Typ definieren, kann er nur durch den Objekttyp geleitet werden, und der Compiler kennt den tatsächlichen Typ des anonymen Typs nach dem Weitergeben nicht mehr.

Diese Linie kann mit der Cast-Erweiterungsmethode geworfen werden. Im Folgenden finden Sie einen Prototyp der Cast-Methode.



öffentliches statisches T-Guss (dieses Objekt o, T t)      
{            
   Rückgabe ();         
}
2. Wie erzeugt man eine anonyme Typliste für die föderierte Linq-Anfrage?        



var User = GetAnonymous(). Cast(new { BenutzerName = "", LastLoginIp = "" });         
var list = neue Liste< ?>();
Das Prinzip ist dasselbe wie oben.



var User = neu   
{     
   BenutzerName = "yaosansi", LastLoginIp = "127.0.0.1"
};              
var list = User.MakeList();         
Liste. Add(Benutzer);            
Console.Write(list[0]. Benutzername);
Schauen wir uns die MakeList()-Methode an:



öffentliche statische Liste MakeList (this T t) {            
    neue Liste zurückgeben();      
}
Natürlich denkst du vielleicht, dass die obige Methode nicht perfekt genug ist und du einen Benutzer zur Liste hinzufügen musst, sodass du folgende Methode hast:      



öffentliche statische Liste MakeList (diese T t,params T[]-Elemente)         
{            
   neue Liste (Gegenstände) zurückgeben;   
}  
Wenn aufgerufen, kann es geschrieben werden als:



var User = neu   
{   
  BenutzerName = "yaosansi", LastLoginIp = "127.0.0.1"   
};              
var list = Benutzer.MakeList(Benutzer);         
Console.Write(list[0]. Benutzername);   
Diesmal kommen wir zur Sache und verstehen, wie die Linq-föderierte Abfrage implementiert ist.



var q = aus p in db. Produkte     
wobei p.Supplier.Country == "USA" && p.UnitsInStock == 0   
Selectiere p;
Die obige Abfrage besteht aus zwei verwandten Tabellen, und nur der Inhalt einer Tabelle wird zurückgegeben; in diesem Fall kann eine stark typisierte Liste in der Datenschicht zurückgegeben werden. Zum Beispiel:



öffentliche Liste SelectProducts()   
{ var q = aus p in db. Produkte     
       wobei p.Supplier.Country == "USA" && p.UnitsInStock == 0        
       Selectiere p;        
       zurück q.ToList;   
}
Wenn die zurückgegebene Ergebnismenge mehr als zwei Tabellen enthält, wie sollte sie dann übergeben werden? Sie haben sicher gedacht, dass wir, wenn die zurückgegebene Ergebnismenge eine einzige Datenzeile ist, die zuvor erwähnte anonyme Lieferart verwenden können, um die benötigten Ergebnisse zu erhalten. Öffentlicher Zweck



öffentliches Objekt SelectProducts()  
{ var q = aus p in db. Produkte      
       wobei p.Supplier.Country == "USA" && p.UnitsInStock == 0        
       wählen Sie neue {p.UnitsInStock,p.Supplier.Sid} aus;      var result = q. Einzel();  
       Rückgabeergebnis;   
}
Diese Prämisse besteht jedoch darin, dass die Geschäftslogikschicht die spezifischen Arten von Anonymitätstypen in der Datenschicht kennen muss. Diese Schichtung ist von geringer Bedeutung. Das ist nicht das, was wir wollen. Außerdem fehlschlug auch die Methode, den anonymen Listentyp zur Rückgabe der Ergebnismenge der mehrzeiligen Daten zurückzugeben, nach Experimenten fehl. Das bedeutet, dass keine der beiden Methoden zur Anonymität zu Beginn dieses Artikels funktionieren wird.

Methode 1: Die föderierte Abfrage von Linq passt Klassen mit derselben Struktur wie der Rückgabetyp an



öffentliche Klasse CustomQuery      
{ public uint UnitsInStock { public uint   
   { get; Set; }            
  öffentliche Int Sid   
   { get; Set; }        
}
Dies kann gelöst werden, wenn die Abfrageergebnisse eine Ergebnismenge mehrerer Tabellen sind. Da du wissen musst, welche Art der Anonymität zurückgegeben wird, musst du zusätzlich zur Nicht-Übereinstimmung mit der Multilayer eine zusätzliche Klasse definieren. Aber das stimmt und kann die Ergebnisse liefern, die wir brauchen, indem wir starke Typen verwenden.

Methode 2: Linq-föderierte Abfrage mittels System.Func-Delegation (Referenz: Zurückgabe von var aus einer Methode in C# 3.0)

Datenschicht:



public IEnumerable GetCustomersWithOrders(Func,
TProjektion> Projektion)   
{ Rückgabe vom Kunden in _customers           
     let customerOrders = von der Bestellung in _orders                                
     Wo Ordnung. CustomerID = customer.ID            
     Projection auswählen (Kunde, KundenAufträge);  
}
Geschäftslogik-Schicht:



var results = GetCustomersWithOrders(  
(Kunde, Bestellungen) => neu   
{ Name = Kunde. Name,               
     OrderCount = Befehle. Count()        
});
Das auf diese Weise zurückgegebene Ergebnis ist weiterhin ein echter anonymer Typ in der Geschäftslogikschicht und kann direkt verwendet werden.

Methode 3: Linq-föderierte Abfragen verwenden gespeicherte Prozeduren oder Views.




Vorhergehend:LINQ bekommt das Problem mit gespeicherter Prozedur und Rückgabewert, mein gespeichertes Prozedur
Nächster:Microsoft gab IE auf und war entschlossen, 220.000 Zeilen Code zu erstellen
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com