我有 QueryOver ,我选择日志记录,其中日志名称以 D 或<开头em> F (使用通配符)。
conv.InnerTransaction.Session.QueryOver<Log>()
.Where(l => l.DateTime > _datetime)
.And(
l => l.Name.IsLike("D%") || l.Name.IsLike("F%")
)
相反,我希望搜索的名称是动态使用列表中的值。怎么办呢?
我尝试过类似的事情:
var query = conv.InnerTransaction.Session.QueryOver<Log>()
.Where(l => l.DateTime > _datetime);
foreach (var name in _names)
{
query = query.And(l => l.Name.IsLike(name));
}
但是这会导致列表中每个名称的多个AND语句,而它只需要是一个OR。
答案 0 :(得分:3)
你试过Disjunction
吗?我有一次类似的要求,但我不得不使用Conjunction
。 Disjunction
将or
多个条件放在一起。
var disjunction = new Disjunction();
var query = Session.QueryOver<Log>().Where(l => l.DateTime > _datetime);
foreach (var name in _names)
{
disjunction.Add(Restrictions.On<Log>(log => log.Name).IsLike(name));
}
var queryResult = query.Where(disjunction).List<Log>();