2009-03-30 2 views
0

나는 아음속 포럼에서 다음 질문을했지만 한 응답 만 얻은 것처럼 보였으므로 더 많은 빛을 줄 수 있는지 여기에 게시 할 것입니다.Subsonic.Select에서 SQL 함수 호출

SELECT : 문제에 ...

나는 (또는 쿼리 도구) .. 그것이라는 사용자 정의 함수를 사용하여 "SPLIT()"선택 도구를 사용하여 음속을 통해 다음과 같은 SQL 문을 생성 할 * FROM VwPropertyList
WHERE VwPropertyList.idCreatedBy = 123
AND VwPropertyList.idCounty = 45 01 2, 29 IN (SPLIT FROM 항목을 선택 (DistrictGroupList은, ','))

내 음속 동등한은 다음과 같습니다 (이 SQL의 마지막 부분은 SPLIT 함수를 사용). ..

어둡게 mySelect 새로운 SubSonic.Select
mySelect.From (VwPropertyList.Schema)
mySelect.Where로 (VwPropertyList.Colum ns.IdCreatedBy) .IsEqualTo (123)
mySelect.And (VwPropertyList.Columns.IdCounty) .IsEqualTo (45)
mySelect.And (29) .IN (뉴 SubSonic.Select ("항목").에서 ("SPLIT이 마지막 부분에 기인하지만 작동하지 않습니다

(" & VwPropertyList.Columns.DistrictGroupList & ',' ') ")) .. 내가 추가하는 방법"및 29 (선택 항목 FROM SPLIT (DistrictGroupList, ',')) "내 Subsonic.Select에? = & "선택"문자열로

희미한 SQL :

내가 아음속 포럼에서받은 응답은 같은 .. 내가 Subsonic.Select 페지 등) (하드 코딩 InlineQuery로 문을 대체 제안 & VwPropertyList.Schema.TableName
SQL = SQL & "에서"VwPropertyList.Columns.Item
SQL = SQL & "어디"& VwPropertyList.Columns.IdCreatedBy & " = @CreatedBy"
SQL = SQL & "그리고"& VwPropertyList.Columns.IdCounty & "= @County"
SQL = SQL & "그리고 @DistrictGroup IN ( SPLIT (DistrictGroupList에서 항목 선택 ', ') "

항목 = SubSonic.InlineQuery(). ExecuteTypedList ( MyItem의) (SQL, 123,45,29)

나는 SubSonic을 선호한다.가능한 경우 페이징 기능 등을 사용할 수 있도록 선택하십시오.

아이디어가 있으십니까?

답변

2

당신은 (메모리에서, 검증되지 않은)과 같이 원래 쿼리 개체 (이전 2.1)를 사용을 시도 할 수 있습니다 :

이 가 이
2

당신은 요한의 제안을 할 수 또는 당신은 우리의 InlineQuery를 사용하여 SQL을 쓸 수

Query q = new Query(VwPropertyList.Schema.TableName); 
q.WHERE("29 IN (SELECT Item FROM SPLIT(DistrictGroupList, ','))"); 

// pass q.ExecuteReader() to the Load() method of your view. 
- 어떤 허용 당신은 원시 SQL을 작성하고 PARAMS에 전달하는 :

+1

또는 var qry = new CodingHorror ("SELECT ..."); :) –

0

내가 당신과 같이 원래의 쿼리 객체를 사용하는 것이 좋습니다 것입니다 (값 "열 = @의 PARAM이 WHERE 테이블 SELECT * FROM")

var에 QRY = 새로운 InlineQuery 페이징을 얻으려고합니다. 인라인 쿼리에는 페이징을 허용하는 메서드가 없습니다.

절대적으로 Subsonic.Select를 사용하려는 경우 두 아이디어를 메쉬로 처리하고 인라인 쿼리를 실행하여 값 목록을 얻은 다음 Regular Subsonic.Select를 사용하여 검색된 값을 선택 사례로 전달한 다음 DB로 두 번 갈거야. 나는 그것이 즉이다 유창한 인터페이스를 사용하여 작성 Subsonic.Select 문을 읽는 선호 보조 노트에

SubSonic.Select.AllColumnsFrom() 어디에요 (VwPropertyList.Columns.IdCreatedBy) .IsEqualTo (123) .And (VwPropertyList.Columns.IdCounty) .IsEqualTo (45) .ExecuteAsCollection();

0

답장을 보내 주셔서 감사합니다.

InlineQuery를 끝내고 정상적으로 Subsonic.Select ...에 의해 생성 된 페이징 코드를 다시 작성했습니다. 최상의 솔루션은 아니지만 작동하는 것 같습니다.

나는이 비록 같은 짓을 할 수 있다면 그것은 좋은 것 :

희미한들로 새로운 SubSonic.Select
s.From (VwPropertyList.Schema)
sWhere을 (VwPropertyList.Columns.IdCreatedBy) .IsEqualTo (123)
모래 (VwPropertyList.Columns.IdCounty) .IsEqualTo (45)
s.And (29) .IN (뉴 InlineQuery ("( SPLIT (DistrictGroupList의 항목을 선택하고", ")))))