Запрос NHibernate для подкласса с linq или запрос - PullRequest
1 голос
/ 19 июля 2011

У нас есть следующая «универсальная» структура параметров

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 ]

2 голосов
/ 19 июля 2011

использовать JoinQueryOver . что-то вроде (не проверено):

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

на самом деле, если у вас нет ограничения на EntityWithSettings, вы можете просто сделать обычный QueryOver<Parameter>.

0 голосов
/ 03 августа 2011

Как насчет

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