Linq查询dB并使用自定义比较器

时间:2010-10-19 14:12:57

标签: linq nhibernate linq-to-sql linq-to-nhibernate

在Linq查询中使用自定义比较器的用途是什么?它们是有益的还是只是服务器上的过载。

所以我在谈论像

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

这就是我的stringcomparer类的样子

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);
    }

所以我想知道这个查询是如何对数据库运行的?我认为linq在内部处理这个问题,只有在comparere中的所有情况都运行之后,它才会向db发送请求。

编辑:

如果您发现很难相信上述内容不起作用,那么请采用像

这样的简单示例
return  Session.Linq<Class>().Where(x=>x.Id.Equals(comparerObject,StringComparison.InvariantCultureIgnoreCase))

那么您认为预期的行为是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

对于LINQ to SQL,我希望在执行时失败 - 查询翻译器将不知道如何处理StringComparer<T>类。

如果您已经给出,您应该使用:

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

根据完全您想要达到的目标,更复杂的案例可能会或可能不会可行。