添加Like限制到字典

时间:2018-01-18 16:21:24

标签: c# nhibernate

我为项目ID设置了nHibernate限制,如下所示:

shuffle_batch

所以它通过设置限制:

返回具有该项目Id的任何内容
string_input_producer

这很有效。我现在想要使用等效的SQL Like添加另一个限制。我试过了:

var attachmentProperties = new System.Collections.Generic.Dictionary<string, object>();
attachmentProperties.Add("Id", this.project.Id);
  

没有任何论据符合所要求的形式   参数值

我希望获得Type包含&#34; dog&#34; (除了Id匹配)。我该怎么做?

2 个答案:

答案 0 :(得分:1)

您有两种选择:

让所有Dog类实现一个通用接口(IDog)。然后,字典将是:

new System.Collections.Generic.Dictionary<string, IDog>();

或者,您可以这样做,这可能有点奇怪,如果您在验证Add方法的某些原因上没有提供顶部的东西。您同样必须检查其他方法。

    class DogDictionary : Dictionary<string, object>
    {

        public virtual void Add(KeyValuePair<string, object> item)
        {

            if (item.Value.GetType().ToString().ToUpper().Contains("DOG"))
                throw new ApplicationException("Invalid Data Type for Value.  Should Have 'Dog' in the Object Name");
        }
    }

我会选择第一个选项。

答案 1 :(得分:0)

另一种方法是为Criteria创建Restrictions.Conjunction

Conjunction conjunction = Restrictions.Conjunction();
conjunction.Add(Restrictions.Eq("Id", this.project.Id));
conjunction.Add(Restrictions.Like("Type", "%dog%"));
conjunction.Add(Restrictions.Not(Restrictions.Like("Type", "%cat%")));