2

我正在尝试在活动记录中进行伪模糊逻辑查询。

我该如何表达:

field1 像'A' 或 field2 像'A' 或 field3 像'A' 或 field1 像'B' 或 field2 像'B' 或 field3 像'B'

使用 ICriteria 对象......“喜欢”需要是 InsensitiveLikeExpressions 吗?

4

2 回答 2

2

这个怎么样:

    public T[] FuzzyFind<T>(string[] fields, string[] values) where T: class {
        var dis = new Disjunction();
        foreach (var f in fields)
            foreach (var v in values)
                dis.Add(new InsensitiveLikeExpression(f, v, MatchMode.Anywhere));
        return ActiveRecordMediator<T>.FindAll(dis);
    }

然后你这样称呼它:

var locations = FuzzyFind<ARAddressableLocation>(new[] { "field1", "field2", "field3 }, new[] { "a", "b" });

它产生(字段,值)的所有组合

根据需要调整 MatchMode。

于 2009-02-28T03:55:43.043 回答
0

它不是 ICriteria 对象,但在 HQL 中,答案是这样的:

string hql = "FROM ARAddressableLocation as al WHERE (LOWER(al.SubNumber) = '{0}' OR LOWER(al.Number) = '{0}' OR...";
ARAddressableLocation[] obj = (ARAddressableLocation[])Execute(
    delegate(ISession session, object instance) {
      IQuery query = session.CreateQuery(hql);
      IList results = query.List();

      ARAddressableLocation[] list = new ARAddressableLocation[results.Count];
      results.CopyTo(list, 0);

      return list;
    }, null);

我的字段总是字符串,所以我选择将它们放入自己而不是使用 NHibernate 的参数。

(为答案投票将不胜感激)

于 2009-02-27T05:01:53.207 回答