2013-08-02 3 views
0

У меня есть источник LinqDataSource. Этот источник данных читается из таблицы в SQL Server, содержащей поле ID с типом CHAR. Некоторые из записей имеют пробелы в этой области, и я хотел бы отфильтровать их. «Пусто» не является NULL, а не пустой строкой.Использование значения ASCII параметра в предложении Where для LinqDataSource

Использование 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> 
+0

Рискну предположить, что-то близко to 'Where =" Employee_ID! = @Employee_ID && Employee_ID! = '\ 0' "или' Where = "Employee_ID! = @Employee_ID && System.Data.Objects.SqlClient.SqlFunctions.Ascii (Employee_ID) == 0' –

+0

@JoachimIsaksson - спасибо за ответ, однако, при использовании вашего первого предложения я получаю «_Character literal должен содержать ровно один символ_», а ваше второе предложение дало «_No свойство поля« System »существует в типе« Personnel'_ ». другие ides? – RoastBeast

+0

Хм, может быть, ты урожденный d пропустить пространство имен, 'Where =" Employee_ID! = @Employee_ID && SqlFunctions.Ascii (Employee_ID)! = 0 "'. –

ответ

0

Я считаю, что корень вашей проблемы является то, что у вас есть непечатаемые символы в столбце (вкладка, CR, LF и т.д. ...) Когда вы выполняете запрос, результат выглядит как пустой, но на самом деле имеет непечатаемый символ.

Я думаю, что лучшим грубым действием будет проверка данных (в приложении), чтобы убедиться, что в этот столбец вставлены только допустимые символы. Это предотвратит использование фильтра сдвига.

Если вы не можете изменить данные или проверить данные, я бы, вероятно, попробовать что-то вроде этого, так как это SARGable (может быть использован для поиска по индексу)

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

К сожалению, у меня нет контроля над тем, как приложение записывает в базу данных, которую я читаю. Я не уверен, как получить предложение LIKE, которое вы упомянули в разметке, но я попробую. Благодарю. – RoastBeast

Смежные вопросы