return queryable.Where(version => version.Id.ToString().Contains(searchKey));
这行代码会导致“不支持ToString异常”。
目标:创建搜索查询,将字符串、整数、GUID与字符串关键字进行比较。
感谢任何帮助。
return queryable.Where(version => version.Id.ToString().Contains(searchKey));
这行代码会导致“不支持ToString异常”。
目标:创建搜索查询,将字符串、整数、GUID与字符串关键字进行比较。
感谢任何帮助。
Guid searchGuid;
try
{
searchGuid = Guid.Parse(searchKey);
}
catch (System.FormatException)
{
// Handle invalid search key
}
return queryable.Where(version => version.Id == searchGuid);
编辑:
很抱歉,我没有测试过,但据我所知,NHibernate.Linq能够将类型转换语句转换为等效的SQL Cast函数。也许这样可以实现:
return queryable.Where(version => (string)version.Id == searchGuid);
我不太确定C#语法。在VB.NET中,我会这样写:
Return queryable.Where(Function(version) CType(version.Id,String) = searchGuid)
使用LINQ无法直接完成此操作(您必须扩展LINQ提供程序,这是非常困难的)
但是,使用NHibernate的所有其他查询方法很容易实现。
以下是使用QueryOver的示例:
return session.QueryOver<YourEntity>()
.Where(Restrictions.Like(
Projections.Cast(NHibernateUtil.String,
Projections.Property<YourEntity>(
version => version.Id)),
searchKey,
MatchMode.Anywhere))
这里是至少针对框架4.5的答案...
Version Ver = null;
foreach (Version V in Versions) {
Guid g = V.ID;
if (string.Compare(g.Value.ToString(), searchkey)) {
Ver = V;
break;
}
}
OR in LINQ
Version Ver = Version.Where(v => v.ID.Value.ToString == searchkey).FirstOrDefault;
//Use found Ver ;-)
return queryable.
Where(version =>
(String.Compare(version.Id.ToString(),searchkey, true)==0);
注意:在这里,我将searchkey视为字符串,并将version.Id转换为字符串,使用String.Compare比较两个字符串并忽略大小写,通过在比较方法中设置true。