Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
此SelectClauseVisitor不支持NHibernate LINQ 3.0 Oracle表达式类型10005_Oracle_Nhibernate_Distinct - Fatal编程技术网

此SelectClauseVisitor不支持NHibernate LINQ 3.0 Oracle表达式类型10005

此SelectClauseVisitor不支持NHibernate LINQ 3.0 Oracle表达式类型10005,oracle,nhibernate,distinct,Oracle,Nhibernate,Distinct,我有以下LINQ查询 QueryResult<List<PersonDemographic>> members = new QueryResult<List<PersonDemographic>>(); var query = (from ms in this.Session.Query<MemberSummary>() where ms.NameSearch.StartsWith(f

我有以下LINQ查询

    QueryResult<List<PersonDemographic>> members = new QueryResult<List<PersonDemographic>>();

    var query = (from ms in this.Session.Query<MemberSummary>()
                 where ms.NameSearch.StartsWith(firstName.ToUpper())
                    && ms.NameSearch2.StartsWith(lastName.ToUpper())
                 select new PersonDemographic
                 {
                     FirstName = ms.FirstName.ToProperCase(),
                     LastName = ms.LastName.ToProperCase(),
                     PersonId = ms.Id,
                     Address = new Address
                     {
                         Line1 = ms.AddressLine1.ToProperCase(),
                         Line2 = ms.AddressLine2.ToProperCase(),
                         City = ms.City.ToProperCase(),
                         State = ms.State,
                         Zipcode = ms.Zipcode,
                     },
                     PhoneNumber = new PhoneNumber
                     {
                          Number = string.IsNullOrWhiteSpace(ms.PhoneNumber) ? null : Regex.Replace(ms.PhoneNumber, @"(\d{3})(\d{3})(\d{4})", "$1-$2-$3")
                     }
                 });

    if (this.Session.Transaction.IsActive)
    {
        members.Data = query.Distinct().Take(15).ToList();
    }
    else
    {
        using (var transaction = this.Session.BeginTransaction())
        {
            members.Data = query.Distinct().Take(15).ToList();                    
            transaction.Commit();
        }
    }   
QueryResult成员=新QueryResult();
var query=(从此.Session.query()中的ms)
其中ms.NameSearch.StartsWith(firstName.ToUpper())
&&ms.NameSearch2.StartsWith(lastName.ToUpper())
选择新人像图
{
FirstName=ms.FirstName.TopropertCase(),
LastName=ms.LastName.TopropertCase(),
PersonId=女士Id,
地址=新地址
{
Line1=ms.AddressLine1.TopropertCase(),
Line2=ms.AddressLine2.TopropertCase(),
City=ms.City.toProperties(),
State=State女士,
Zipcode=Zipcode女士,
},
PhoneNumber=新电话号码
{
Number=string.IsNullOrWhiteSpace(ms.PhoneNumber)?null:Regex.Replace(ms.PhoneNumber,@“(\d{3}”)(\d{3})(\d{4})”,“$1-$2-$3”)
}
});
if(this.Session.Transaction.IsActive)
{
members.Data=query.Distinct().Take(15.ToList();
}
其他的
{
使用(var transaction=this.Session.BeginTransaction())
{
members.Data=query.Distinct().Take(15.ToList();
Commit();
}
}   
代码正在事务部分下运行。如果我使用它没有明显的区别,我没有问题。添加Distinct会给我一个例外

{“此SelectClauseVisitor不支持表达式类型10005。”}

我找不到任何确定的东西。有人能帮忙吗

谢谢,
Paul

在该查询中,NH可能不知道如何转换为SQL:

  • ToProperCase(看起来像您的扩展方法)
  • string.IsNullOrWhiteSpace(这是.NET4中新增的,NH是根据3.5编译的)
  • Replace(这在SQL中是不可能的,除非您有一个支持它的DB并为它编写一个方言)

Diego,我不认为这些作业会有任何影响,但嘿,你永远不知道。所以我删除了你提到的所有东西,我仍然得到同样的错误。有一件事我确实忘了提到,这是一个视图,而不是一张桌子。不确定这是否有区别。我刚升级到NHibernate 3.1,现在例外情况是此SelectClauseVisitor不支持表达式类型“NhDistinctExpression”。@PaulSperanza:消息更好,错误仍然相同:您正在尝试混合客户端和服务器端操作。我建议您删除我提到的所有表达式,然后再试一次。我删除了所有转换操作。它不喜欢的是我的人像对象。此对象是没有功能的DTO。