使用LinqDataSource的Where子句中的参数的ASCII值

时间:2013-08-02 16:28:55

标签: sql sql-server visual-studio-2010 linq-to-sql

我有一个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="&quot;&quot;" Name="Employee_ID" Type="String" />
    </WhereParameters>
</asp:LinqDataSource>

1 个答案:

答案 0 :(得分:0)

我相信你的问题的根源是你的列中有不可打印的字符(tab,CR,LF等...)当你查询运行时,结果看起来像一个空白但实际上它有一个不可打印的字符。

我认为最好的粗略操作是验证数据(在应用程序中)以确保只将有效字符插入此列。这样可以防止您必须使用make shift过滤器。

如果您无法更改数据或验证数据,我可能会尝试这样的事情,因为它是SARGable(可用于索引搜索)

select *
from MyTable
WHERE employee like '[a-z0-9]%'