当前位置: 首页 > 编程语言 > C#

查询对不同类的限制比返回类分享

时间:2023-04-11 00:56:37 C#

C#学习教程:查询限制与返回类不同的类Firstname,person.LastnamefromPersoninnerjoinContractoncontract.PersonId=person.IdinnerjoinBudgetonbudget.ContractId=contract.IdinnerjoinChoiceonchoice.BudgetId=budget.IdinnerjoinChosenBenefitonChosenBenefit.ChoiceId=choice.IdwhereChosenBenefit.BenefitImplementationId=77我认为下面的方法可以解决问题,但我得到了一个无效的引用,我无法使用堆栈跟踪。选择选择=空;预算预算=空;合同合同=空;人人=空;varpeopleThatChose=会话。chosen.Budget,()=>budget).JoinAlias(chosenBenefit=>budget.Contract,()=>contract).JoinAlias(chosenBenefit=>contract.Person,()=>person).Where(chosenBenefit=>chosenBenefit.BenefitImplementation.Id==77).Select(benefit=>person);从所有例子来看,我认为它应该是一个QueryOver,但我无法按照我想要的方式工作。我错过了什么?假设关于映射的一些事情,我很确定你可以在没有子查询的情况下做到这一点:Personperson=null;varpeopleThatChose=Session.QueryOver(()=>person).JoinQueryOver(person=>person.Contracts).JoinQueryOver(contract=>contract.Budget).JoinQueryOver(budget=>budget.Choice).JoinQueryOver(choice=>choice.ChosenBenefit).Where(chosen=>chosen.BenefitImplementation.Id==77).SelectList(list=>list.Select(()=>person.FirstName).Select(()=>person.LastName)).List();如果我没有正确阅读你的模型:一个人可以有更多的合同(contract.PersonId)。所以在这种情况下我们要做的是将查询分成两部分。子查询,从Contract中获取PerosnId(按利益过滤)和Person外部查询仅检索person...1)Subqueryvarsubquery=Session.QueryOver()//从Benefit到Contract的路径相同.JoinAlias(chosenBenefit=>chosenBenefit.Choice,()=>choice).JoinAlias(chosenBenefit=>choice.Budget,()=>budget).JoinAlias(chosenBenefit=>budget.Contract,()=>contract)//我们过滤选择的收益,获得正确的合同2)现在我们将查询Person,并使用Filter子查询结果(在数据库服务器上)varpeopleThatChose=session.QueryOver().WithSubquery.WhereProperty(p=>p.Id).In(subquery);所以,我们做了什么:以上就是C#学习教程:查询不同类的限制,返回类共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: