Reputation: 2314
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
Reputation: 32725
How about
var values = es.SelectMany(e =>
e.Parameters
.Where(p => p.Name == "SomeName")
.OfType<IntegerParameter>()
.Select(p => p.Value));
Upvotes: 0
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