c# - ravendb linq query does not use overriden equals method? -
this works :
iqueryable<record> query = _db.query<record>() .statistics(out stats) .where(r => r.keywords.any( k => k.value.equals(searchinputmodel.keyword.value)));
but doesn't
iqueryable<record> queryborked = _db.query<record>() .statistics(out stats) .where(r => r.keywords.any( k => k.equals(searchinputmodel.keyword)));
even though have overridden equals , hashcode keyword class below, value checked equality :
protected bool equals(keyword other) { homecoming string.equals(value, other.value, stringcomparison.invariantcultureignorecase); } public override bool equals(object obj) { if (referenceequals(null, obj)) homecoming false; if (referenceequals(this, obj)) homecoming true; if (obj.gettype() != this.gettype()) homecoming false; homecoming equals((keyword) obj); }
and hashcode :
public override int gethashcode() { unchecked { homecoming (value.tolower().gethashcode() * 397); //return (value.tolower().gethashcode()*397) ^ vocab.tolower().gethashcode(); } }
does ravendb utilize different equality check ?
ravendb uses it's own linq-like implementation on database side (query returns iravenqueryable instead of "normal" .net queryable object), hence not possible utilize overridden implementation such in query.
the next work:
iqueryable<record> queryborked = _db.query<record>() .statistics(out stats) .tolist() .where(r => r.keywords.any( k => k.equals(searchinputmodel.keyword)));
notice "tolist()". homecoming results of records can farther cut down using .net linq implementation , hence overriden equals implementation.
do note however, homecoming record info database , reducing info farther in code using where-clause. whereas first, working, illustration perform where-clause in database , homecoming reduced set of record results you.
c# linq ravendb hashcode equality
No comments:
Post a Comment