开发者

Linq queries on dB and using custom Comparers

开发者 https://www.devze.com 2023-01-20 15:49 出处:网络
Whats the use of using custom comparers in Linq queries? Are they beneficial or are they just an overload on the server.

Whats the use of using custom comparers in Linq queries? Are they beneficial or are they just an overload on the server.

So i am talking about queries like

IEnumerable<Class> GetMatch(Class comparerObject)
{
  return  Session.Linq<Class>().Where(x=>new StringComparer<Class>().Equals(x,comparerObject))
}

and this is how my stringcomparer class looks like

public class StringComparer<T> : IEqualityComparer<T>
    where T : class, IStringIdentifiable
{
    public bool Equals(T x, T y)
    {
        if (x == null && y == null)
            return true;

        if (x == null || y == null)
            return false;

        return x.Id.Equals(y.Id, StringComparison.OrdinalIgnoreCase);
    }

So I was wondering how is this query run against the db? I think linq handles this internally where in it sends a request to the db only after all the cases in the comparere are run.

Edit:

Well if you are finding it hard to believe that the above will not work then take a simple example like

return  Session.Linq<Class开发者_StackOverflow中文版>().Where(x=>x.Id.Equals(comparerObject,StringComparison.InvariantCultureIgnoreCase))

Then what do you think is the expected behavior?

Thanks.


For LINQ to SQL, I'd expect that to fail at execution time - the query translator won't know what to do with your StringComparer<T> class.

In the case you've given, you should just use:

string idToMatch = comparerObject.Id;
return Session.Linq<Class>().Where(x => x.Id == idToMatch);

More complicated cases may or may not be feasible depending on exactly what you want to achieve.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号