给出代码(这是一个组成的例子)。还可以想象,合同和计划中有更多属性。
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不需要可测量的时间
答案 0 :(得分:0)
应该很简单。试试这个:
(from contract in query.Contracts
from plan in contract.Plans
select new
{
ContractId = contract.Id,
PlanId = plan.Id
})
.ToList();