2010-08-11 34 views
5

Tôi muốn gửi email cho tất cả người dùng nơi sinh nhật của họ là ngày hôm nayHồ sơ thành viên ASP.NET

Tôi đang sử dụng thành viên asp.net (3.5) tích hợp sẵn. Tất cả người dùng có một hồ sơ (được lưu trữ trong aspnet_Profile) có chứa một ngày/thời gian bất động sản được gọi là 'sinh nhật'. Tôi cần lấy danh sách địa chỉ email của người dùng từ bảng 'aspnet_Membership' nơi sinh nhật của người dùng ngày hôm nay, cùng với tên của người dùng 'là thuộc tính chuỗi trong bảng aspnet_Profile.

Tôi muốn danh sách được trả về tốt nhất khi sử dụng C# LINQ.

Tôi không chắc chắn làm thế nào để truy cập vào các tài sản sinh nhật trong bảng cấu hình, dựa trên cách nó được lưu trữ trong bảng db tức là cột tên/giá trị

Trả lời

3

Tôi nghĩ bạn nên xem xét thay đổi đến nhiều cải tiến bảng cung cấp dịch vụ dựa trên:

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

này cho phép bạn tách dữ liệu của bạn vào một giá trị mỗi cột của bảng trong cách SQL tiêu chuẩn. Điều này thực hiện tốt hơn so với nhà cung cấp tiêu chuẩn và giải quyết vấn đề truy vấn cơ sở dữ liệu Hồ sơ của bạn.

Sẽ mất một lượng nhỏ công việc để chuyển đổi cơ sở dữ liệu, nhưng ở phía mã, nó chỉ là vấn đề định cấu hình trong một nhà cung cấp khác và không có gì khác thay đổi. Đó là sự beaurty của mẫu nhà cung cấp.

+0

cảm ơn @Daniel tôi thậm chí không biết về nhà cung cấp đó, chắc chắn sẽ sử dụng điều này trong tương lai! –

+0

Bạn được chào đón. –

0

tôi không sử dụng LINQ đủ để cung cấp cho bạn một câu trả lời tốt, nhưng sau đây có thể là SQL cơ bản bạn cần (Đây là cách SSMS tôi tạo ra nó trong thiết kế query):

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

Các Cơ chế lược tả phân tích các giá trị bằng cách chia tách từng cặp tên/giá trị, và sau đó phân tích cú pháp chúng một cách riêng lẻ. Bạn có thể viết mã để tự làm điều đó. Hoặc bạn có thể làm theo cách tiếp cận của @ Daniel và sử dụng nhà cung cấp thay thế, điều này giúp cuộc sống dễ dàng hơn. Nhà cung cấp ngoài hộp là một cơn đau với chuỗi nối.

Mã này có nằm trong cùng một ứng dụng không? Bạn chỉ có thể sử dụng đối tượng hồ sơ để lấy nó, nếu bạn đang nói C# ... ngữ cảnh này là gì? Dịch vụ hàng loạt?

Các vấn đề liên quan