2010-07-15 59 views
5

我刚刚下载了NHibernate的Linq提供程序,我只是有点兴奋。但我不太了解Linq的语法。如何从linq查询返回某些属性,而不是完整的对象?

我可以从这样的查询返回整个对象:

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

我可以选择一个属性是这样的:

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

但我怎么会选择两个属性,例如foo.Id和foo.Bar?或者这是不可能的?

感谢

大卫

回答

8

使用匿名投影:

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

感谢Stephen和ck。我对这个Linq业务感到非常兴奋。这是自jQuery以来我发现的最令人兴奋的事情。为什么需要我这么久? :) – David 2010-07-15 13:27:03

+0

哦,我的天啊,这绝对是病! :) – David 2010-07-15 13:29:07

+1

LINQ确实是开创性的。等待,直到你发现[LINQ to events](http://blogs.msdn.com/b/rxteam/archive/2010/07/07/rx-hands-on-labs-published.aspx)。然后你的大脑会真的开始弯曲。 :) – 2010-07-15 13:33:51

1

你必须创建一个新的Anonymous类型,只会在当前范围内可用(即它不能从方法等返回)

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

或您可以创建一个自定义类并填充它。

+0

+1表示它仅在当前范围内可用。 – David 2011-07-21 09:18:26

+0

非常有趣的博客你有。喜欢关于奴隶制的文章! – David 2011-07-21 09:21:22