2010-08-11 4 views
5

생년월일이 오늘 인 모든 사용자에게 전자 메일을 보내려합니다.ASP.NET 회원 프로필

내장 asp.net (3.5) 멤버십을 사용하고 있습니다. 모든 사용자에게는 '생일'이라는 날짜/시간 속성이 포함 된 프로필 (aspnet_Profile에 저장되어 있음)이 있습니다. aspnet_Profile 테이블의 문자열 속성 인 사용자 'firstname'과 함께 사용자 생일이 오늘있는 'aspnet_Membership'테이블에서 사용자 전자 메일 주소 목록을 가져와야합니다.

C# LINQ를 사용하여 목록을 반환하는 것이 좋습니다.

나는 이름/값 열 즉, DB 테이블에 저장되는 방식

답변

3

난 당신이 많은-개선에 변경을 고려해야한다고 생각을 기반으로, 프로파일 테이블의 생일 속성에 액세스하는 방법을 잘 모르겠습니다 테이블 기반 공급자는 :

http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx

이것은 당신이 표준 SQL 방식으로 테이블 컬럼 당 하나 개의 값으로 데이터를 분리 할 수 ​​있습니다. 이것은 표준 제공자보다 덜컹 거리며 프로파일 데이타베이스를 질의하는 문제를 해결합니다.

데이터베이스를 변환하는 데 약간의 작업이 소요되지만 코드 측에서는 다른 공급자에서 구성하는 것만으로 변경해야합니다. 그것은 공급자 패턴의 beaurty입니다.

+0

덕분에 @ 대니얼 나는 심지어 그 제공자를 알지도 못했고, 확실히 앞으로 이것을 사용할 것입니다! –

+0

당신을 진심으로 환영합니다. –

0

내가 당신에게 좋은 대답을 줄 정도로 LINQ를 사용하지 않지만, 다음은 당신이 필요로하는 기본 SQL 될 수있다 (이것은 내 SSMS 쿼리 디자이너에서 생성하는 방법입니다) :

SELECT  aspnet_Profile.PropertyValuesString AS firstname, aspnet_Membership.Email 
FROM   aspnet_Profile INNER JOIN 
         aspnet_Membership ON aspnet_Profile.UserId = aspnet_Membership.UserId INNER JOIN 
         aspnet_Profile AS aspnet_Profile_1 ON aspnet_Profile.UserId = aspnet_Profile_1.UserId 
WHERE  (aspnet_Profile_1.PropertyNames LIKE N'birthday') AND (aspnet_Profile.PropertyNames LIKE N'firstname') AND (DATEADD(dd, 0, DATEDIFF(dd, 0, 
         aspnet_Profile_1.PropertyValuesString)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE()))) 
0

프로필 메커니즘은 각 이름/값 쌍을 위로 나눈 다음 개별적으로 구문 분석하여 값을 구문 분석합니다. 직접 코드를 작성할 수 있습니다. 또는 @ Daniel의 접근 방식을 따르고 대안 제공자를 사용할 수 있으므로 삶이 편하게됩니다. out-of-the-box 공급자는 문자열 연결을 사용하는 고통입니다.

동일한 애플리케이션에이 코드가 있습니까? 당신은 C# ...이 코드 조각이 어떤 문맥인지 말하는 경우 프로필 개체를 사용하여 검색 할 수 있습니다. 배치 서비스?