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

时间:2011-07-18 20:38:18

标签: nhibernate linq-to-nhibernate

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

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

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

由于

2 个答案:

答案 0 :(得分:2)

使用JoinQueryOver。像(未经测试的):

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

实际上,除非您对EntityWithSettings有限制,否则您只需定期QueryOver<Parameter>

答案 1 :(得分:0)

怎么样

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