2011-01-08 3 views
3

여러 위치에서 EntityDataSource를 사용하는 응용 프로그램이 있습니다.EntityDataSource는 쿼리에서 *를 % 와일드 카드로 바꿉니다.

EDS에서 TextBox의 사용자 입력을 기반으로 Where 절을 수동으로 작성합니다.

데이터를 쿼리 할 때 사용자가 "%"대신 "*"(별표)를 입력 할 수 있기를 바랍니다.

검색/바꾸기에 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> 

하지만 "서버 태그가 잘 형성되지 않는다"메시지가 나타납니다. 엔티티 SQL 참조에서 동등한 "바꾸기"기능을 찾을 수 없습니다 ....

아이디어가 있으십니까?

+1

당신은 시도해 봤어 "*"와 "%"를''* ''와' '%''로 바꾸는 것은 어쩌면 에러를 제거하는 것일까 요 – Slauma

답변

1

페이지 다시 게시를 처리하고 txtPartNumberQuery의 내용을 수정할 수 있습니다. EntityDataSource는 % (ESQL 쿼리를 작성하기 때문에)에서만 작동하므로 데이터 바인딩을 실행하기 전에 코드 숨김에서 *를 %로 변경해야합니다.

+0

네, 그렇게 할 수 있습니다. :) 나는이 일을 많이 해본 경험이 없지만 EDS 클래스를 재정의하고 Where 절을 작성하는 메서드를 수정하는 것에 대해 생각했습니다. 이론적으로는 가능해야합니다 .... – Shayne

+0

그것이 내가 가진 이유입니다. 실제 코드에서 EntityDataSource, LinqDataSource 또는 SqlDataSource를 사용하지 않았습니다. 항상 바인딩을 제어 할 수있는 수준이 필요했기 때문에 완전히 수동으로 처리했거나 ObjectDataSource를 사용했습니다. 데이터 원본에서 사용하는 사용자 지정 개체에 내 쿼리 논리를 래핑합니다. –

+0

내가 들었어. 저는 지금 8 개월 동안 신청서를 작성했으며 이것이 마지막 장애물입니다. 나는 EntityDataSource만을 독점적으로 사용했다. 내가 거기에 몇 가지 창조 트릭을 haev :) 나는 내가 ODS와 내 경험 대 EDS를 사용하여 약 25 % 빠르다고 말하고 싶습니다. 그것은 개발 생명주기의 많은 시간을 절약 해주었습니다. 비록 이틀 동안 저를 곤란하게 만든 약 3 건의 사례가있었습니다. 내가 그걸 알아 내지 못한다면, 나는 포스트에서 그것을 뒤쫓아 가서 무슨 일이 일어나고 있는지를 훈련시킬 것이다. 거대한 손실이 없다 ... – Shayne

1

슬 루마 - 제안이 해결되었습니다. 그런 명백한 대답. 은 "Where 절 문자열을 종료했다. 나는 맹세 할 수 있었다 나는 것을 시도했다, 그러나 나는하지 같아요. Becuase, 나는 그냥이 질문에 와서 일어난 답변을보고 그것을 작동합니다!

<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> 
관련 문제