2010-07-15 7 views
5

Ich habe gerade den Linq-Provider für NHibernate heruntergeladen und bin nur ein bisschen aufgeregt. Aber ich kenne die Linq-Syntax nicht so gut.Wie geben Sie bestimmte Eigenschaften aus einer linq-Abfrage zurück, anstatt vollständige Objekte?

kann ich ganze Objekte aus einer Abfrage wie folgt zurück:

var query = from foo in session.Linq<Kctc.BusinessLayer.Domain.Case>() 
        where foo.CaseNumber > 0 
        select foo; 

Und ich kann eine einzige Eigenschaft wie folgt wählen:

var query = from foo in session.Linq<Kctc.BusinessLayer.Domain.Case>() 
        where foo.CaseNumber > 0 
        select foo.Id; 

Aber wie würde ich wähle zwei Eigenschaften, z.B. foo.Id und foo.Bar? Oder ist das nicht möglich?

Dank

David

Antwort

8

Verwenden eine anonyme Projektion:

var query = from foo in session.Linq<Kctc.BusinessLayer.Domain.Case>() 
       where foo.CaseNumber > 0 
       select new { foo.Id, foo.Bar }; 
+0

Danke an Stephen und ck. Ich bin so begeistert von diesem Linq-Geschäft. Es ist das aufregendste, was ich seit jQuery gefunden habe. Warum hat es so lange gedauert? :) – David

+0

Oh mein Gott, das ist absolut krank! :) – David

+1

LINQ ist in der Tat bahnbrechend. Warte einfach, bis du etwas über [LINQ to events] erfahren hast (http://blogs.msdn.com/b/rxteam/archive/2010/07/07/rx-hands-on-labs-published.aspx). Dann wird dein Geist wirklich anfangen, sich zu beugen. :) –

1

Sie eine neue Anonymous Art zu schaffen hat, die nur im aktuellen Bereich verfügbar sein werden (dh es kann nicht von einer Methode zurückgegeben werden usw.)

var query = from foo in session.Linq<Kctc.BusinessLayer.Domain.Case>() 
       where foo.CaseNumber > 0 
       select new { foo.Id, foo.Bar }; 

Or Sie können eine benutzerdefinierte Klasse erstellen und diese füllen.

+0

+1 für die Erwähnung, dass es nur im aktuellen Umfang verfügbar ist. – David

+0

Sehr interessanter Blog, den Sie dort haben. Liebte den Artikel über Sklaverei! – David