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

FluentNHibernatefilterwithparameterizedINclause分享

时间:2023-04-10 19:17:18 C#

FluentNHibernatefilterwithparameterizedINclause在FluentNHibernate中,是否可以在List类型的过滤器中加入参数,使得过滤条件生成WHERESomeColumnIN(@x,@y,@z)?我的用例是根据发票的ID和发票行号列表获取发票及其行的子集。我想在与发票相同的往返行程中急切地获得线路。我假设它会这样做,但我找不到参数类型的正确类型声明:DomainObject:publicclassInvoice{publicintId{get;set;}publicListLines{get;set;}}publicclassInvoiceLine{publicintId{get;set}publicintLineNumber{get;set;}}映射:publicclassInvoiceMap:ClassMap{publicInvoiceMap(){Id(x=>x.Id);HasMany(x=>x.Lines).ApplyFilter();}}publicclassInvoiceLineMap:ClassMap{publicInvoiceLineMap(){Id(x=>x.Id);地图(x=>x.LineNumber);}}过滤器定义:publicclassOnlyLinesWithNumbersFilter:FilterDefinition{publicOnlyLinesWithNumbersFilter(){WithName("OnlyLinesWithNumbers");WithCondition("LineNumberIN(:LineNumbers)");AddParameter("LineNumbers",??这里放什么??);}}查询:varfilterName="OnlyLinesWithNumbers";session.EnableFilter(filterName).SetParameterList("LineNumbers",new[]{1,2,3});varquery=session.QueryOver().Where(i=>i.Id==42).Fetch(i=>i.Lines).Eager.TransformUsing(newDistinctRootEntityResultTransformer());varresult=query.SingleOrDefault();session.DisableFilter(filterName);就拿-2InvoiceLineinvoiceLineAlias=null;varlist=session.QueryOver().Where(x=>x.Id==1).JoinQueryOver(x=>x.Lines,()=>invoiceLineAlias,JoinType.LeftOuterJoin).WhereRestrictionOn(()=>invoiceLineAlias.LineNumber).IsIn(newList{1,2,3}).List();制作sql:SELECTthis_.IdasId2_1_,invoicelin1_.Invoice_idasInvoice3_3_,invoicelin1_.IdasId3_,invoicelin1_.IdasId3_0_,invoicelin1_.LineNumberasLineNumber3_0_FROM"Invoice"this_leftouterjoin"InvoiceLine"invoicelin1_onthis_.Id=invoicelin1_.Invoice_idWHEREthis_.Id=@p0andinvoicelin1_.LineNumberin(@p1,@p2,@p3);@p0=1[类型:Int32(0)],@p1=1[类型:Int32(0)],@p2=2[类型:Int32(0)],@p3=3[类型:Int32(0)]你可以写varlist=session.QueryOver().WhereRestrictionOn(p=>p.SomeColumn).IsIn(someList).List();要将NHibernateFilters与数字组一起使用,请将NHibernateUtil.Int32放在AddParameter方法中,这样做:WithCondition("LineNumberIN(:LineNumbers)");AddParameter("LineNumbers",NHibernate22Util.??}}启用过滤器时,在SetParameterList=newint[]{1,2,3}中设置数组int[]lines;session.EnableFilter("OnlyLinesWithNumbers").SetParameterList("LineNumbers",lines);在Formytesting,I'musingNHibernate4.0.0.400我认为这是正确的语法,我只是想把它写下来?以上都是C#学习教程分享的:FluentNHibernatefilterwithParameterizedIN子句,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注—InvoiceLineinvoiceLine=null;varresult=session.QueryOver().Where(x=>x.Id==42).JoinQueryOver(x=>x.InvoiceLines,()=>invoiceLine).WhereRestrictionOn(x=>x.ItemNumber).IsIn(new[]{1,2,3}).SingleOrDefault();本文整理自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除,如需转载请注明出处:

最新推荐
猜你喜欢