Daniel Marbach
Daniel Marbach

Reputation: 2314

NHibernate query for subclass with linq or query over

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

Upvotes: 1

Views: 1685

Answers (2)

Remo Gloor
Remo Gloor

Reputation: 32725

How about

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

Upvotes: 0

J. Ed
J. Ed

Reputation: 6752

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>.

Upvotes: 2

Related Questions