2010-07-15 5 views
5

Ho appena scaricato il provider Linq per NHibernate e sono solo un po 'emozionato. Ma non conosco bene la sintassi di Linq.Come si restituiscono determinate proprietà da una query linq, anziché completare gli oggetti?

posso restituire oggetti interi da una query come questa:

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

E posso selezionare una singola proprietà come questa:

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

Ma come avrei selezionare due proprietà, per esempio foo.Id e foo.Bar? O non è possibile?

Grazie

David

risposta

8

Usa una proiezione anonimo:

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

Grazie a Stephen e ck. Sono così entusiasta di questo business Linq. È la cosa più eccitante che abbia mai visto da quando jQuery. Perché mi ci è voluto così tanto tempo? :) – David

+0

Oh mio Dio, questo è assolutamente malato! :) – David

+1

LINQ è davvero rivoluzionario. Aspetta di scoprire [LINQ agli eventi] (http://blogs.msdn.com/b/rxteam/archive/2010/07/07/rx-hands-on-labs-published.aspx). Quindi la tua mente * inizierà * veramente a piegarsi. :) –

1

È necessario creare un nuovo tipo di Anonymous, che saranno disponibili solo nell'ambito corrente (vale a dire che non è possibile essere restituito da un metodo, ecc.)

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

oppure puoi creare una classe personalizzata e popolarla.

+0

+1 per menzionare che è disponibile solo nell'ambito corrente. – David

+0

Blog molto interessante che hai. Mi è piaciuto l'articolo sulla schiavitù! – David

Problemi correlati