2010-08-11 5 views
5

Je souhaite envoyer un e-mail à tous les utilisateurs dont l'anniversaire est aujourd'huiProfil d'adhésion ASP.NET

J'utilise l'abonnement asp.net intégré (3.5). Tous les utilisateurs ont un profil (stocké dans aspnet_Profile) qui contient une propriété date/heure appelée «anniversaire». J'ai besoin d'obtenir une liste des adresses e-mail des utilisateurs de la table 'aspnet_Membership' où un anniversaire d'utilisateur est aujourd'hui, ainsi que le nom des utilisateurs 'qui est la propriété de chaîne dans la table aspnet_Profile.

Je voudrais une liste renvoyée de préférence en utilisant C# LINQ.

Je ne suis pas sûr de savoir comment accéder à la propriété d'anniversaire dans le tableau de profil, en fonction de la façon dont elle est stockée dans la table db-à-dire des colonnes nom/valeur

Répondre

3

Je pense que vous devriez envisager de changer la plus améliorée tableau fournisseur basé:

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

Cela vous permet de séparer vos données en une seule valeur par colonne de table de la manière standard SQL. Cela fonctionne petter que le fournisseur standard et il résout votre problème d'interroger la base de données Profils.

La conversion de la base de données nécessitera une petite quantité de travail, mais du point de vue du code, il s'agit simplement de configurer dans un fournisseur différent et rien d'autre ne doit changer. C'est la beaurty du modèle de fournisseur.

+0

merci @Daniel je n'étais même pas au courant de ce fournisseur, va certainement utiliser cela à l'avenir! –

+0

De rien. –

0

Je n'utilise assez LINQ pour vous donner une bonne réponse, mais ce qui suit peut-être le SQL sous-jacente dont vous avez besoin (Voici comment mes SSMS généré dans le concepteur de requêtes):

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

Le Le mécanisme de profil analyse les valeurs en séparant chaque paire nom/valeur, puis en les analysant individuellement. Vous pourriez écrire du code pour le faire vous-même. Ou vous pouvez suivre l'approche de Daniel et utiliser le fournisseur alternatif, ce qui rend la vie plus facile. Le fournisseur out-of-the-box est une douleur avec la concaténation de chaîne.

Ce code est-il dans la même application? Vous pouvez simplement utiliser l'objet profile pour le récupérer, si vous parlez C# ... dans quel contexte est ce morceau de code? Service par lots?

Questions connexes