Учитывая это Sql Экспрессия как входного параметра: (предполагается, что нет никакого способа, чтобы изменить как генерируется этот входной параметр)изменить существующий где условие в SQL выражении
Db.From<Contact>().Where(C => C.Email != null).Or(C => C.Reference != null);
метод требует, чтобы добавить еще одно условие, например
exp.And(C.UserId == Session.UserId);
Однако условие UserId должно быть истинным независимо от любых существующих условий. Но поскольку исходное выражение Sql использует «Или», условие UserId не применяется.
Таким образом, окончательный Sql должен выглядеть примерно так:
SELECT * FROM Contact WHERE (Email IS NOT NULL OR Reference IS NOT NULL) AND UserId == 12
На данный момент Sql генерируемой выглядит следующим образом:
SELECT * FROM Contact WHERE Email IS NOT NULL OR Reference IS NOT NULL AND UserId == 12
Любой есть какие-нибудь идеи?
EDIT: Пока что единственное, что работает, это взломать WhereExpression для добавления() до и после предложения Where исходного выражения Sql. Просто надеясь, что будет лучше.
Это похоже на то, что «И», и поэтому условие «Или» из исходного выражения Sql переопределит любые условия, определенные здесь. – vonec
@vonec hmmm, это звучит как ошибка в sql-генераторе; a 'Where' должен применяться ко всему' IQueryable ' –
@vonec, в этом случае вам придется перестроить дерево« Expression »(возможно, через« ExpressionVisitor »); это '.Expression', доступное на объекте? –