NHibernate 使用 linq 查询子类或查询 over

发布于 2024-11-24 21:03:18 字数 627 浏览 4 评论 0原文

我们有以下“通用”参数框架

public class EntityWithSettings
{
    public IList<Parameter> Parameters { get; }
}

public class Parameter 
{
    public string Name { get; set; }
    public string ValueAsString { get; set; }
}

public class IntegerParameter : Parameter
{
    public int Value { get; set; } // Provides ValueAsString
}

如何使用 linq 或查询查询执行如下查询:

var values = from e in es
               from p in e.Parameters
               where p.Name == "SomeName" && p is IntegerParameter
               select p.Value

当然上面的代码不正确,但我怎样才能完成类似的事情。

谢谢

We have the following "generic" parameter framework

public class EntityWithSettings
{
    public IList<Parameter> Parameters { get; }
}

public class Parameter 
{
    public string Name { get; set; }
    public string ValueAsString { get; set; }
}

public class IntegerParameter : Parameter
{
    public int Value { get; set; } // Provides ValueAsString
}

How can I do a query like the following with linq or query over query:

var values = from e in es
               from p in e.Parameters
               where p.Name == "SomeName" && p is IntegerParameter
               select p.Value

For sure the above code is not correct but how could I accomplish something similar.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薄情伤 2024-12-01 21:03:18

使用 JoinQueryOver。类似于(未经测试):

QueryOver<EntityWithSettings>()
   .JoinQueryOver(es=> es.Parameters)
   .Where(p => p is IntegerParameter && p.Name == "SomeName")
   .Select(p=> p.Value);

实际上,除非您对 EntityWithSettings 有限制,否则您只需执行常规的 QueryOver即可。

use JoinQueryOver. something like (untested):

QueryOver<EntityWithSettings>()
   .JoinQueryOver(es=> es.Parameters)
   .Where(p => p is IntegerParameter && p.Name == "SomeName")
   .Select(p=> p.Value);

actually, unless you have a restriction on EntityWithSettings, you can just do a regular QueryOver<Parameter>.

小情绪 2024-12-01 21:03:18

怎么样

var values = es.SelectMany(e => 
                e.Parameters
                 .Where(p => p.Name == "SomeName")
                 .OfType<IntegerParameter>()
                 .Select(p => p.Value));

How about

var values = es.SelectMany(e => 
                e.Parameters
                 .Where(p => p.Name == "SomeName")
                 .OfType<IntegerParameter>()
                 .Select(p => p.Value));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文