ASP.NET членский профиль - PullRequest
       28

ASP.NET членский профиль

5 голосов
/ 11 августа 2010

Я хочу разослать электронное письмо всем пользователям, у которых сегодня день рождения

Я использую встроенное членство asp.net (3.5).У всех пользователей есть профиль (хранится в aspnet_Profile), который содержит свойство даты / времени, которое называется «день рождения».Мне нужно получить список адресов электронной почты пользователей из таблицы «aspnet_Membership», где сегодня день рождения пользователя, а также «имя пользователя», которое является строковым свойством в таблице aspnet_Profile.предпочтительно возвращается с использованием C # LINQ.

Я не уверен, как получить доступ к свойству дня рождения в таблице профиля, основываясь на том, как оно хранится в таблице БД, т.е. столбцы имя / значение

Ответы [ 3 ]

3 голосов
/ 11 августа 2010

Я думаю, вам стоит подумать о переходе на значительно улучшенного провайдера на основе таблиц:

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

Это позволяет разделить данные на одно значение на столбец таблицы стандартным способом SQL. Это работает лучше, чем стандартный поставщик, и это решает вашу проблему запроса базы данных профилей.

Для преобразования базы данных потребуется небольшой объем работы, но на стороне кода это просто вопрос настройки в другом поставщике, и больше ничего не должно измениться. Это красота шаблона провайдера.

0 голосов
/ 11 августа 2010

Механизм профиля анализирует значения, разбивая каждую пару имя / значение, а затем анализирует их по отдельности.Вы можете написать код, чтобы сделать это самостоятельно.Или вы могли бы следовать подходу @ Daniel и использовать альтернативного поставщика, который облегчает жизнь.Поставщик из коробки - это проблема с конкатенацией строк.

Этот код в том же приложении?Вы можете просто использовать объект профиля, чтобы получить его, если вы говорите на C # ... в каком контексте находится этот кусок кода?Пакетная служба?

0 голосов
/ 11 августа 2010

Я не использую 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())))
...