2011-07-18 24 views
1

子類,我們有以下的「通用」的參數框架NHibernate的查詢使用LINQ或查詢過

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

使用JoinQueryOver。像(未經測試):

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

實際上,除非你有EntityWithSettings的限制,你可以做一個普通。

0

如何

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

這並沒有工作:( –