2009-07-14 5 views
2

Ich habe 3-Arrays von einem Webservice ...optimal Mehrere Arrays in C# ASP.net

Countries : Consists of Key - Value 
Regions : Consists of Id - Name - CountryCode(fk: countries) 
Areas  : Consists of Id - Name - CountryCode - RegionID(fk: regions) 

kommt zu verknüpfen (das fk zeigt nur, dass sie die Menge an Informationen, Fremdschlüssel, sie assoziiert zum vorherigen Array)

Ich bin fest, was der beste Weg (am besten) ist, diese miteinander zu verbinden, LINQ Joining sieht aus wie Kopfschmerzen und ich bin mir nicht sicher über HashSets.

Irgendwelche Ideen?

*** Zusätzlich; * Dies wird im Anwendungsstatus als APP gespeichert, da es einmal am Tag aktualisiert werden muss (was meiner Meinung nach schneller ist, wenn die App einmal am Tag aktualisiert wird als in eine Datenbank und Aktualisierung basierend auf einem Datumsstempel.

+0

Es gibt keine solche Tiere als C# 3.5 –

+0

sollte Proof Check C# 3.0 NET3.5 gewesen –

Antwort

5

ich bin neugierig, warum Sie sagen, LINQ Joining sieht nach Kopfweh aus: Es ist genau das, was LINQ to Objects für (Abfragen Ihrer In-Memory-Objekte und Bereitstellung von Diensten wie Joins zwischen diesen Objekten) ist

Ein möglicher Nachteil in LINQ ist der Performance-Overhead, aber um ehrlich zu sein, ist es für mich noch kein großes Problem.

Die Syntax ist einfach from obj1 in source1 join obj2 in source2 on <conditional> select {obj1.prop, obj2.prop}

Diese SQL ziemlich stark spiegelt, was die Absicht war.

(So verwenden Sie Ihr Beispiel:

from a in Areas 
join r in Regions 
on a.RegionID equals r.Id 
join c in Countries 
on r.CountryCode equals c.Key 
select new {c.Value, r.Name, a.Name, a.Id }; 

)

+1

Ihr Recht versagen, die nicht ganz sieht so schlimm, wie ich erwartet habe. –

+1

Um dies für die spätere Verwendung zwischenzuspeichern, sollten Sie einen abgeflachten Typ definieren, der diese Eigenschaften umfasst, und den LINQ in '(...) .ToList()' umhüllen, so dass er nicht jedes Mal, wenn er angefordert wird, ausgeführt wird. – Jason

+0

Danke an euch beide: o) –

0

Linq verbindet sind wirklich nicht so schlimm, die Syntax zunächst ein wenig komisch, aber man gewöhnt sich daran ziemlich schnell verwendet.

1

Kannst du sie nicht in eine DataSet Dump? Es ist eine Sammlung von DataTables, die Sie für Relations vordefinieren können.

private void CreateRelation() 
{ 
    // Get the DataColumn objects from two DataTable objects 
    // in a DataSet. Code to get the DataSet not shown here. 
    DataColumn parentColumn = 
     DataSet1.Tables["Customers"].Columns["CustID"]; 
    DataColumn childColumn = 
     DataSet1.Tables["Orders"].Columns["CustID"]; 
    // Create DataRelation. 
    DataRelation relCustOrder; 
    relCustOrder = new DataRelation("CustomersOrders", 
     parentColumn, childColumn); 
    // Add the relation to the DataSet. 
    DataSet1.Relations.Add(relCustOrder); 
} 
+0

über speicherintensive sprechen .... –