2011-04-11 29 views
1

我有以下LINQ查询NHibernate的LINQ 3.0甲骨文表达型10005不受此SelectClauseVisitor

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(); 
     } 
    } 

的代码项下之交易部分运行支持。如果我没有一个明显的使用它,我没有问题。将所述不同的给了我一个例外

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

我找不到任何明确的。谁能帮忙?

感谢, 保罗

回答

0

有很多在该查询的东西,NH不可能知道如何转化为SQL:

  • ToProperCase(看起来像你的一个扩展方法)
  • string.IsNullOrWhiteSpace(这是在.NET 4中新,NH编译对3.5)
  • Regex.Replace(这只是无法实现的SQL做的,除非你有一个支持它一个数据库,并为其编写一个方言)
+0

迭戈,我没有想到任务会有什么影响,但嘿,你永远不会知道。所以我删除了你提到的任何东西,我仍然得到同样的错误。我忘记提及的一件事是,这个sis打了一个视图,而不是一张桌子。不知道这是否有所作为。 – 2011-04-12 12:40:35

+0

我刚刚升级到NHibernate 3.1,现在的例外情况是这个SelectClauseVisitor不支持表达式类型'NhDistinctExpression'。 – 2011-04-12 13:41:25

+0

@PaulSperanza:信息比较好,错误仍然是一样的:你试图混合客户端和服务器端操作。我建议你删除我提到的所有表情,然后重试。 – 2011-04-12 14:17:46