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