Orchard Content Manager:如何在不同的零件记录字段之间应用OR运算符
本文关键字:记录 零件 字段 之间 运算符 OR 应用 Manager Content Orchard | 更新日期: 2023-09-27 18:00:39
我需要对来自两个不同部分的字段使用OR运算符来过滤数据:
var result = ContentManager.Query("ContentType")
.Where<PartARecord, PartBRecord>(
(a, b) => a.FieldA.Contains(searchText) || b.FieldB.Contains(searchText)
).List();
有可能吗?
字段将数据库中的故事值设置为Infoset,而不能通过标准sql(IHqlQuery或IContentQuery)进行查询。但如果您启用"投影部分",则字段值也将在单独的表中显示,并且您将能够查询该值。
你可以尝试这样的方法(我不确定它是否有效。可能需要替换Any()或Contains()函数)
var result = ContentManager.Query("ContentType")
.Where<FieldIndexPartRecord>(p => p.StringFieldIndexRecords.Any(
f =>
(f.PropertyName == "ContentType.FieldA." && f.Value.Contains(searchText)) ||
(f.PropertyName == "ContentType.FieldB." && f.Value.Contains(searchText))
))
.List();
但如果你要使用IHqlQuery,那就做
var result = ContentManager.HqlQuery().ForType(new string[] { "ContentType" })
.Where(
a => a.ContentPartRecord<FieldIndexPartRecord>().Property("StringFieldIndexRecords", "fieldAAndB"),
f => f.Or(
f1 => f1.And(
checkName => checkName.Eq("PropertyName", "ContentType.FieldA."),
checkValue => checkValue.Like("Value", searchText, HqlMatchMode.Anywhere)
),
f2 => f2.And(
checkName => checkName.Eq("PropertyName", "ContentType.FieldB."),
checkValue => checkValue.Like("Value", searchText, HqlMatchMode.Anywhere)
))
)
.List();