2012-01-25 36 views
0

我正在寻找我的个人档案中的全名。有人能告诉我我做错了什么吗?如何在linqdatasource的where子句中搜索concatinated字符串?

我得到:Profile.FullName没有支持的对SQL的转换。

LINQ部分类:

partial class Profile 
    { 
     public static readonly Expression<Func<Profile, string>> expFullName = p => p.FirstName + " " + p.LastName; 
     public static readonly Func<Profile, string> funcFullName = expFullName.Compile(); 

     public string FullName 
     { 
      get { return funcFullName(this); } 
     } 
    } 

数据源代码:

<asp:LinqDataSource runat="server" ID="someSource" ContextTypeName="MyContext" TableName="Images" 
Where='Approved == true && CategoryID = 2 && (@searchTerm = "" || Profile.FullName.Contains(@searchTerm))'> 
     <WhereParameters> 
      <asp:ControlParameter Name="searchTerm" ControlID="txtSearch" DefaultValue="" ConvertEmptyStringToNull="false" /> 
     </WhereParameters> 
    </asp:LinqDataSource>  

我要注意的是,下面的解决方案工作。但是我想为FullName派生一个属性并无条件地使用它。这甚至有可能吗?

(Profile.FirstName + " " + Profile.LastName).Contains(@searchTerm) 

回答

0

这工作,因为它可以转化为SQL:

(Profile.FirstName + " " + Profile.LastName).Contains(@searchTerm) 

这不会起作用,因为全名不是一个映射成一列在SQL:

(Profile.FullName).Contains(@searchTerm) 
+0

我明白,但我想要做的是在linq类本身上有一个表达式,它知道在查询中使用“FullName”到“FirstName +”“+ LastName”。不知道它是否可能如此想我会问:) – Mike

相关问题