C# 向字典中添加Like限制

C# 向字典中添加Like限制,c#,nhibernate,C#,Nhibernate,我为项目Id设置了nHibernate限制,如下所示: var attachmentProperties = new System.Collections.Generic.Dictionary<string, object>(); attachmentProperties.Add("Id", this.project.Id); 这很有效。现在,我想添加另一个限制,使用类似SQL的等价物。我试过: attachmentProperties.Add(NHibernate.Criteri

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

var attachmentProperties = new System.Collections.Generic.Dictionary<string, object>();
attachmentProperties.Add("Id", this.project.Id);
这很有效。现在,我想添加另一个限制,使用类似SQL的等价物。我试过:

attachmentProperties.Add(NHibernate.Criterion.Restrictions.Like("Type", "%dog%"));
没有给出与所需的形式化参数相对应的参数 参数值

我想得到任何类型包含“dog”的内容(除了Id匹配之外)。我该怎么做?

您有两个选择:

让所有的狗类实现一个公共接口(IDog)。然后,字典将是:

new System.Collections.Generic.Dictionary<string, IDog>();
newsystem.Collections.Generic.Dictionary();
或者,您可以这样做,这可能有点奇怪,如果由于某种原因,在您验证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");
        }
    }
类字典:字典
{
公共虚拟无效添加(KeyValuePair项)
{
if(item.Value.GetType().ToString().ToUpper()包含(“狗”))
抛出新的ApplicationException(“值的数据类型无效。对象名称中应该有'Dog');
}
}

不过我还是会选择第一个选项。

另一种方法是创建一个
限制。连接标准:

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%"))); 
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%")));