C# 向字典中添加Like限制
我为项目Id设置了nHibernate限制,如下所示: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
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%")));