EntityDataSource заменить * символом% в запросах - PullRequest
3 голосов
/ 08 января 2011

У меня есть приложение, которое использует EntityDataSource во многих местах.

В EDS я вручную строю предложение Where на основе пользовательского ввода из TextBox'es.

Я бы хотел, чтобы пользователь мог вводить "*" (звездочки) вместо "% "при запросе данных.

Легко ли использовать Entity SQL или саму EDS для поиска / замены?Я знаю, что мог бы на самом деле изменить TextBox после ввода данных, но когда пользователь видит, что его текст был изменен с * на%, я не думаю, что он поймет.

Я пытался использовать T-SQL Заменить команду и сделать что-то вроде этого:

<asp:EntityDataSource ID="EDSParts" runat="server" 
    ConnectionString="name=TTEntities" DefaultContainerName="TTEntities"
    EnableFlattening="False" EntitySetName="Parts"
    OrderBy="it.ID DESC"
    Where ="(CASE
                WHEN (@PartNumber IS NOT NULL) THEN
                    it.[Number] LIKE REPLACE(@PartNumber, "*", "%")
                ELSE
                    it.[ID] IS NOT NULL
            END)">
    <WhereParameters>
        <asp:ControlParameter Name="PartNumber" Type="String"
            ControlID="txtPartNumberQuery" PropertyName="Text" />
    </WhereParameters>
</asp:EntityDataSource>

Но я получаю сообщение "Серверный тег не правильно сформирован".Я не могу найти эквивалентную функцию «заменить» в ссылке на Entity SQL ....

Есть идеи?

Ответы [ 2 ]

1 голос
/ 19 января 2011

Sluama - Ваше предложение исправило это! Такой очевидный ответ. "Завершал строку предложения Where. Я мог бы поклясться, что попробовал, но, думаю, нет. Потому что, я случайно вернулся к этому вопросу и увидел ваш ответ, и он работает!

<asp:EntityDataSource ID="EDSParts" runat="server"
    ConnectionString="name=TTEntities" DefaultContainerName="TTEntities"
    EnableFlattening="False" EntitySetName="Parts"
    OrderBy="it.ID DESC"
    Where ="(CASE
                WHEN (@PartNumber IS NOT NULL) THEN
                    it.[Number] LIKE REPLACE(@PartNumber, '*', '%')
                ELSE
                    it.[ID] IS NOT NULL
             END)">
    <WhereParameters>
        <asp:ControlParameter Name="PartNumber" Type="String"
            ControlID="txtPartNumberQuery" PropertyName="Text" />
    </WhereParameters>
</asp:EntityDataSource> 
1 голос
/ 08 января 2011

Вы можете обрабатывать постбэк и изменять содержимое txtPartNumberQuery.EntityDataSource может работать только с% (потому что он строит запрос ESQL), поэтому перед выполнением привязки данных вам нужно изменить * на% в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...