如何做Sub选择

时间:2018-02-25 22:33:16

标签: linq nhibernate

给出代码(这是一个组成的例子)。还可以想象,合同和计划中有更多属性。

class Contract
{
   public virtual int Id {get; set}
   public virtual IList<Plans> {get; set;}
}

class Plan
{
   public virtual int Id {get; set; }
}

var blah = query
    .SelectMany(contract =>
     contract.Plans.Select(plan => new {ContractId = contract.Id, PlanId = plan.Id})
    .ToList();

NHibernate会用

吐出假人
Cannot create a LambdaExpression that retrieves the value of '[plan]' 
from items with a structure of 'new <>f__AnonymousType168`2(ContractId = 
[contract].Id, PlanId = [plan].Id)'. The item expression does not contain the
 value or it is too complex.    

如果我首先使用ToList()从数据库中检索列表,我可以轻松地在Linq to Objects中执行此操作,它可以为我提供我期待的内容。有没有办法用Linq和Nhibernate做到这一点?

我主要想确保从数据库中检索最小必要的内容,在我的测试中通过从数据库中预取,然后Linq到对象需要〜一秒钟,等效的SQL不需要可测量的时间

1 个答案:

答案 0 :(得分:0)

应该很简单。试试这个:

   (from contract in query.Contracts
    from plan in contract.Plans
    select new
    {
        ContractId = contract.Id,
        PlanId = plan.Id
    })
   .ToList();