2010-11-22 11 views
6

Ich bin auf der Suche nach Unterstützung bei der Konvertierung der folgenden SQL-Abfrage zu LINQ zu Entitäten in C#.Convert SQL Query (mit korrelierter Unterabfrage) zu LINQ in C#

SELECT f.FundId, u.UnitValue 
FROM Fund f 
INNER JOIN FundUnit u ON f.FundId= u.FundId 
WHERE u.EffectiveDate = (SELECT MAX(effectivedate) 
         FROM FundUnit k 
         WHERE u.FundId = k.FundId) 
AND f.Active = 1 
ORDER BY f.FundId 

Die Abfrage liest alle aktiven Fonds in der Datenbank zusammen mit ihrem letzten Einheitswert. Die Fondstabelle, die einen Datensatz für jeden Fonds enthält. Die Tabelle FundUnit enthält einen Einheitswertsatz für jeden Fonds pro Datum. Einheitenwerte für vorherige Daten verbleiben ebenfalls in der Tabelle, um einen Verlauf zu verwalten.

Nicht alle Fonds erhalten jeden Tag einen neuen Anteilswert, daher ist das letzte Datum des Inkrafttretens für alle Fonds nicht notwendigerweise gleich. Daher muss die Max-Funktion (Effektivdatum) auf die Einheitstabelle angewendet werden, die pro Fonds angewendet werden muss - daher die korrelierte Unterabfrage.

Dank

Antwort

6

Um die Frage zu beantworten, muss ich den Namen Ihrer Einheiten übernehmen.

SELECT f.FundId, u.UnitValue vom Fonds: f INNER JOIN FundUnit u auf f.FundId = u.FundId WHERE u.EffectiveDate = (SELECT MAX (effectivedate) FROM FundUnit k wobei u .FundId = k.FundId) uND f.Active = 1 ORDER BY f.FundId

ich werde einen Fonds Einheit und eine FundUnit Einheit annehmen, genau wie das Beispiel.

Ich habe all dies aus dem Speicher und habe es nicht getestet, könnte es einige kleinere Probleme geben. Wenn ich Zeit habe, werde ich es testen.

0

ich denke, das sollte helfen: directly execute sql strings

+0

Sorry, ich sehe es ist linq zu Entitäten. Es gilt das gleiche Prinzip: http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx – Kell