【问题标题】:Using the ASCII value of a parameter in Where clause of LinqDataSource在 LinqDataSource 的 Where 子句中使用参数的 ASCII 值
【发布时间】:2013-08-02 16:28:55
【问题描述】:

我有一个 LinqDataSource。此数据源从 SQL Server 中的一个表中读取,该表包含一个名为 ID 的字段,该字段的类型为 CHAR。某些记录在此字段中有空白,我想将其过滤掉。 “空白”不是 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>

【问题讨论】:

  • 我会冒险猜测接近Where="Employee_ID != @Employee_ID &amp;&amp; Employee_ID != '\0'" 或Where="Employee_ID != @Employee_ID &amp;&amp; System.Data.Objects.SqlClient.SqlFunctions.Ascii(Employee_ID) == 0的东西
  • @JoachimIsaksson - 感谢您的回复,但是,在使用您的第一个建议时,我得到“字符文字必须包含一个字符”,而您的第二个建议产生了““人员”类型中不存在字段“系统”的属性”。还有其他想法吗?
  • 嗯,也许你需要跳过命名空间,Where="Employee_ID != @Employee_ID &amp;&amp; SqlFunctions.Ascii(Employee_ID) != 0"。
  • @JoachimIsaksson - 不幸的是,这也不起作用。我得到“人员”类型中不存在属性或字段“SqlFunctions”
  • 好的,最后一次尝试 ;) Where="Employee_ID != @Employee_ID &amp;&amp; Int32(Employee_ID[0]) != 0" 至少在 Linq to Objects 中工作。找到了 SqlFunctions 之前为我工作的原因,我将它添加到动态 linq 源中的predefinedTypes,猜想在这种情况下这不是一个选项。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 不幸的是,我无法控制应用程序如何写入我正在读取的数据库。我不确定如何将您提到的 LIKE 子句放入标记中,但我会尝试一下。谢谢。
猜你喜欢
  • 2010-12-28
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多