Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LINQ到NHibernate-将guid与字符串进行比较_Linq_Nhibernate_Linq To Nhibernate - Fatal编程技术网

LINQ到NHibernate-将guid与字符串进行比较

LINQ到NHibernate-将guid与字符串进行比较,linq,nhibernate,linq-to-nhibernate,Linq,Nhibernate,Linq To Nhibernate,此行将导致“ToString不受支持异常” 目标:创建将字符串、int、GUID与字符串关键字进行比较的搜索查询 谢谢你的帮助 这样比较更好的方法 return queryable.Where(version => version.Id.ToString().Contains(searchKey)); 注意:在这里,我考虑将searchkey作为字符串和转换版本。Id guid在字符串中并使用字符串。通过在比较方法中输入true来比较字符串和忽略字符串中的大小写。尚未测试,但您可以尝试在

此行将导致“ToString不受支持异常”

目标:创建将字符串、int、GUID与字符串关键字进行比较的搜索查询


谢谢你的帮助

这样比较更好的方法

return queryable.Where(version => version.Id.ToString().Contains(searchKey));

注意:在这里,我考虑将searchkey作为字符串和转换版本。Id guid在字符串中并使用字符串。通过在比较方法中输入true来比较字符串和忽略字符串中的大小写。

尚未测试,但您可以尝试在查询之前建立要搜索的guid对象:

return queryable.
     Where(version => 
                 (String.Compare(version.Id.ToString(),searchkey, true)==0);
编辑:

虽然还没有测试(抱歉,再次测试),但是afaik NHibernate.Linq能够将类型转换语句转换为等效的SQL强制转换函数。也许这应该奏效:

Guid searchGuid;
try 
{
    searchGuid = Guid.Parse(searchKey);
} 
catch (System.FormatException) 
{
   // Handle invalid search key
}

return queryable.Where(version => version.Id == searchGuid);
不过,我不确定辛塔克斯的情况。在VB.NET中,我将编写如下内容:

return queryable.Where(version => (string)version.Id == searchGuid);

不能直接使用LINQ(必须扩展LINQ提供程序,这是非常重要的)

然而,使用NHibernate拥有的所有其他查询方法很容易

下面是QueryOver的一个示例:

Return queryable.Where(Function(version) CType(version.Id,String) = searchGuid)
return session.QueryOver()
.在哪里(
投影.Cast(NHibernateUtil.String,
B.财产(
version=>version.Id)),
搜索键,
匹配模式。任何地方)

以下是框架4.5的答案,至少

return session.QueryOver<YourEntity>()
              .Where(Restrictions.Like(
                         Projections.Cast(NHibernateUtil.String,
                                          Projections.Property<YourEntity>(
                                              version => version.Id)),
                         searchKey,
                         MatchMode.Anywhere))

ToString()不受支持,Equals()似乎也不受支持。System.NotSupportedException{“Int32比较(System.String,System.String,System.StringComparison)”}是的,我注意到-不受支持:)@YevhenMartynov-你在那里看到了什么?嗨,我更新了我的答案,检查它是否对你有帮助我写了一条注释,可能会帮助你了解它的工作原理…是的,这是我的计划“B”,因为GUID类型只有一种情况。“编辑”也不受支持。字符串ToString(System.Object)-1,用于偶数提及“Plan B”。请把它拿出来,因为它应该不惜一切代价避免,因为你会失去索引。这是最糟糕的错误。
    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 ;-)