2016-04-22 3 views
0

Betrachten Sie die folgende PL/SQL-Abfrage:Oracle LISTAGG() Funktionalität in LINQ ausdrücken?

SELECT department_id, LISTAGG(last_name, '; ') 
    WITHIN GROUP (ORDER BY last_name) "Emp_list" 
FROM employees 
GROUP BY department_id; 

Would Äquivalent der oben sein LINQ würde? Vielen Dank!

+1

Warum nicht 'string.Join' verwenden ([Beispiel] (http://www.dotnetperls.com/string-join))? –

+0

Ja, aber was möchten Sie auch andere Spalten aus der Tabelle zurückgeben? Bitte beziehen Sie sich auf das Update SQL. – uncoder

Antwort

0

BEARBEITEN: Da Sie andere Spalten wollen und gruppieren möchten, können Sie nicht die Methode verwenden, die ich ursprünglich vorgeschlagen habe, wie sie ist. Hier ist eine neue Lösung, wenn die generierten SQL ist nicht gerade groß:

from employee in employees 
group employee by employee.department_id into grpEmployee 
select new { 
    DepartmentId = grpEmployee.Key, 
    LastNames = string.Join(", ", employees.Where(e => e.department_id == grpEmployee.Key) 
            .OrderBy(e => e.last_name).Select(e => e.last_name)) 
} 

Beachten Sie, dass diese Methode kombiniert sowohl die Abfrage artig und Lambda-Syntax.


Dies sollte den Trick tun. Wir wählen alle Nachnamen aus und verbinden sie dann zu einem einzigen String als Endergebnis.

string.Join("; ", (from employee in employees 
        where employee.department_id == 30 
        orderby employee.last_name 
        select employee.last_name)) 
+0

Danke! Entschuldigung, ich hätte ein ausführlicheres Beispiel geben sollen, wo nicht nur eine kombinierte Zeichenkette zurückgegeben wird, sondern auch einige andere Spalten. Ich habe die SQL-Anweisung in meiner Frage aktualisiert. – uncoder

+0

@uncoder Ich habe meine Antwort mit einer neuen Lösung aktualisiert – Connor

+1

Danke, aber das scheint nicht zu funktionieren: '' System.NotSupportedException: LINQ to Entities erkennt die Methode 'System.String Join (System.String, System.Collections .Generic.IEnumerable '1 [System.String])' Methode, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden. bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate (ExpressionConverter übergeordnet, MethodCallExpression-Aufruf) ... " – uncoder

Verwandte Themen