C# 在orchard HQL查询中使用OR子句组合两个表中的两个条件

C# 在orchard HQL查询中使用OR子句组合两个表中的两个条件,c#,asp.net-mvc,hql,orchardcms,C#,Asp.net Mvc,Hql,Orchardcms,在orchard cms中,我想在两个不同的ContentPartRecord上编写一个包含两个条件的查询,并与或子句组合使用。组合条件的一种可能方法是: var query = _contentManager.HqlQuery() .Where(a => a.ContentPartRecord<ProductPartRecord>(), a => a.Eq("Title", "myTitle"))

在orchard cms中,我想在两个不同的
ContentPartRecord
上编写一个包含两个条件的查询,并与
子句组合使用。组合条件的一种可能方法是:

var query = _contentManager.HqlQuery()
                           .Where(a => a.ContentPartRecord<ProductPartRecord>(), a => a.Eq("Title", "myTitle"))
                           .Where(a => a.ContentPartRecord<TitlePartRecord>(), a => a.Eq("Price", 1000))
                           .List();

但我无法让它工作。有人有什么建议吗?

在HqlQuery中使用where子句时,需要传递别名(作为第一个参数)。别名意味着您将把where子句应用于特定表(表示此表的类)。当您使用OR子句时,您肯定需要在OR子句的两部分(OR子句的左侧和右侧)中比较特定表的列。我认为这是不可能的,你需要一个标准的方法

但您可以使用:

Action<IAliasFactory> productPartRecordAlias = x => x.ContentPartRecord<ProductPartRecord>().Named("productPartRecord");
Action<IAliasFactory> titlePartRecordAlias = x => x.ContentPartRecord<TitlePartRecord>().Named("titlePartRecord");

var query = _contentManager.HqlQuery()
    .Join(productPartRecordAlias)
    .Join(titlePartRecordAlias)
    .Where(a => a.ContentItem(), p => p.Gt("Id", "0 AND (productPartRecord.Price = 1000 OR titlePartRecord.Title = 'myTitle')"));
Action productPartRecordAlias=x=>x.ContentPartRecord().Named(“productPartRecord”);
操作titlePartRecordAlias=x=>x.ContentPartRecord().Named(“titlePartRecord”);
var query=\u contentManager.HqlQuery()
.Join(productPartRecordAlias)
.Join(titlePartRecordAlias)
其中(a=>a.ContentItem(),p=>p.Gt(“Id”,“0和(productPartRecord.Price=1000或titlePartRecord.Title='myTitle'))));

您可以在
的Where
中使用
|
clause@user3153169例如:;)!?
Action<IAliasFactory> productPartRecordAlias = x => x.ContentPartRecord<ProductPartRecord>().Named("productPartRecord");
Action<IAliasFactory> titlePartRecordAlias = x => x.ContentPartRecord<TitlePartRecord>().Named("titlePartRecord");

var query = _contentManager.HqlQuery()
    .Join(productPartRecordAlias)
    .Join(titlePartRecordAlias)
    .Where(a => a.ContentItem(), p => p.Gt("Id", "0 AND (productPartRecord.Price = 1000 OR titlePartRecord.Title = 'myTitle')"));