2016-08-22 3 views
1

Учитывая это 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. Просто надеясь, что будет лучше.

ответ

0
.Where(C => C.UserId == Session.UserId) 
+0

Это похоже на то, что «И», и поэтому условие «Или» из исходного выражения Sql переопределит любые условия, определенные здесь. – vonec

+0

@vonec hmmm, это звучит как ошибка в sql-генераторе; a 'Where' должен применяться ко всему' IQueryable ' –

+0

@vonec, в этом случае вам придется перестроить дерево« Expression »(возможно, через« ExpressionVisitor »); это '.Expression', доступное на объекте? –

Смежные вопросы