我们有以下“通用”参数框架
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
确定上面的代码不正确,但我怎样才能完成类似的事情。
由于
答案 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));