如何从LINQ查询中返回特定属性而不是完整对象?

5

我刚刚下载了NHibernate的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?这可行吗?

谢谢

David

2个回答

8

使用匿名投影:

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

哦,我的天啊,这绝对是病态的! :) - David
1
LINQ确实是开创性的。等你了解LINQ to events之后,你的思维将会真正开始弯曲。 :) - Stephen Cleary
你链接的页面中没有提到linq或事件(无论是在编程上下文中还是其他方面)。什么是Linq to events? - David
哦,我明白了,异步编程。很棒。 - David
那篇博客文章有一个PDF下载链接。这是对Rx扩展库的简要介绍,该库即将由微软研究完成。术语“LINQ to events”指的是库的基本概念:将异步事件(例如鼠标移动事件)视为数据序列。一旦进行了这种概念性的飞跃,就很自然地可以在LINQ表达式中使用它们,这正是Rx所能实现的。阅读.NET的实践手册以获取所有有趣的细节。 - Stephen Cleary
显示剩余2条评论

1

你需要创建一个新的 匿名 类型,仅在当前作用域中可用(即无法从方法中返回等)

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

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


你的博客非常有趣。我喜欢关于奴隶制的那篇文章! - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接