【问题标题】:How do you return certain properties from a linq query, rather than complete objects?如何从 linq 查询返回某些属性,而不是完整的对象?
【发布时间】:2010-07-15 13:24:00
【问题描述】:

我刚刚下载了 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?还是不可能?

谢谢

大卫

【问题讨论】:

    标签: linq nhibernate linq-to-nhibernate


    【解决方案1】:

    使用匿名投影:

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

    【讨论】:

    • 感谢 Stephen 和 ck。我对这个 Linq 业务感到非常兴奋。这是自 jQuery 以来我发现的最令人兴奋的事情。为什么我花了这么长时间? :)
    • 天哪,这绝对是病态! :)
    • LINQ 确实是开创性的。等到你发现LINQ to events。然后你的头脑会真的开始弯曲。 :)
    • 您链接到的页面不包含任何提及 linq 或事件(无论如何不在编程上下文中)。什么是 Linq to events?
    • 哦,我明白了,异步编程。好吃。
    【解决方案2】:

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

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

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

    【讨论】:

    • 您的博客非常有趣。喜欢关于奴隶制的文章!
    猜你喜欢
    • 1970-01-01
    • 2016-07-30
    • 2011-01-10
    • 2022-01-23
    • 1970-01-01
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多