我有一个LinqDataSource。此数据源从SQL Server中的表中读取,该表包含名为ID的字段,其类型为CHAR。一些记录在这个领域有空白,我想过滤掉这些。 “blank”不是NULL而不是空字符串。
使用T-SQL,此子句无法正确过滤记录:
WHERE Employee_ID <> ''
...虽然这个成功了:
WHERE ASCII(Employee_ID) <> 0
现在我的问题是,如何在设计模式下配置LinqDataSource以按字段的ASCII值进行过滤,或者如何进行过滤,以便不返回这些记录?
这是数据源的标记:
<asp:LinqDataSource ID="LinqDataSourcePersonnel" runat="server" ContextTypeName="exc009p.Owner_SummariesDataContext"
EntityTypeName="" TableName="Personnels" Select='new(Employee_ID, Employee_Name, Employee_Title, (Employee_ID + " " + Employee_Name + " - " + Employee_Title) as employeeIDNameTitle)'
OrderBy="Employee_Name, Employee_ID" Where="Employee_ID != @Employee_ID">
<WhereParameters>
<asp:Parameter DefaultValue="""" Name="Employee_ID" Type="String" />
</WhereParameters>
</asp:LinqDataSource>
答案 0 :(得分:0)
我相信你的问题的根源是你的列中有不可打印的字符(tab,CR,LF等...)当你查询运行时,结果看起来像一个空白但实际上它有一个不可打印的字符。
我认为最好的粗略操作是验证数据(在应用程序中)以确保只将有效字符插入此列。这样可以防止您必须使用make shift过滤器。
如果您无法更改数据或验证数据,我可能会尝试这样的事情,因为它是SARGable(可用于索引搜索)
select *
from MyTable
WHERE employee like '[a-z0-9]%'