使用 Ormlite 对查询条件进行分组

Using Ormlite to Group query conditions

我正在尝试生成如下所示的 SQL 查询:

SELECT * FROM Contact Where UserId = @UserId AND (FirstName = 'John' OR Surname = 'Smith')

这是我能做的:

Db.From<Contact>().Where(c => c.UserId == userId)
.And("(FirstName = {0} OR Surname = {1})"), firstName, surname);

还考虑到姓氏条件是可选的,这意味着我们可以使用原始字符串构建字符串。有没有办法不必使用原始 sql 字符串?

可能的解决方案:

var q = Db.From<Contact>().Where(c => c.UserId == userId);
if (onlyFirstName) {
    q.And(c => c.FirstName == firstName);
} else if (onlySurname) {
    q.And(c => c.Surname == surname);
} else {
    q.And(c => c.FirstName == firstName || c.Surname = surname);
}

有人知道更好的解决方案吗?

var ev = Db.From<Contact>().Where(c => c.UserId == userId);
if (someCase)
    ev.And(c => c.FirstName == firstName || c.Surname == surname);

或者如果没有 someCase

var ev = Db.From<Contact>().Where(c => c.UserId == userId && (c.FirstName == firstName || c.Surname == surname));