I've often wondered that myself. But it seems that AddWithAnd is meant for adding another predicate expression on top of another predicate expression. An expression
is one or more predicates.
If you think about it a bit, that totally changes logic in most, if not all, cases.
I'm not saying that my psuedo-code is exact output but, using just Add() results in:
s!='sd' AND k='jj'
Now, using AddWithAnd() results in:
(s!='sd') AND (k='jj')
BUT, if you already have those predicates defined without an AddWithAnd(), using AddWithAnd() will result in:
(s!='sd' AND k='jj') AND (kk=76)
The last example is A LOT different than saying:
s!='sd' AND k='jj' AND kk=76
Basically, from what I understand, the AddWith*() methods are meant to seperate logical expressions. Somebody correct me if I'm off-base here.