2012-10-26 114 views
0

我在EF使用過濾導航屬性

var users = Context.CreateSet<User>() 
      .Select(u => new { 
           User = u, 
           Salary = u.Salaries.Where(s => !s.Deleted) 
           }) 
           .AsEnumerable() 
           .Select(a => a.User); 

有一個LINQ方式NHibernate的做到這一點,我希望它通過延遲加載導航性能負載工作太

回答

0

NHibernate不會以這種方式用過濾結果填充集合,它不是一個好主意,因爲你得到一個破碎的模型。最佳的選擇,我看到

var users = session.Query<User>() 
    .Fetch(u => u.Salaries) 
    .Select(u => new 
    { 
     User = u, 
     ActiveSalaries = u.Salaries.Where(s => !s.Deleted) 
    }); 

public virtual IEnumerable<Salary> ActiveSalaries 
{ 
    get { return Salaries.Where(s => !s.Deleted); } 
} 

var users = session.Query<User>() 
    .Fetch(u => u.Salaries) 

// ctor 
ActiveSalaries = Salaries.Where(s => !s.Deleted); 

// property 
public virtual IEnumerable<Salary> ActiveSalaries { get; private set; } 


// mapping almost same as that of Salaries 
HasMany(x => x.ActiveSalaries).Table("Salaries").Where("Deleted=0"); 

var users = session.Query<User>() 
    .Fetch(u => u.ActiveSalaries);