ASP.NET成员资料

时间:2010-08-11 14:21:00

标签: asp.net membership profile

我想向今天过生日的所有用户发送电子邮件

我使用的是内置的asp.net(3.5)会员资格。所有用户都有一个配置文件(存储在aspnet_Profile中),其中包含一个名为“birthday”的日期/时间属性。我需要从今天用户生日的'aspnet_Membership'表中获取用户电子邮件地址列表,以及aspnet_Profile表中字符串属性的用户'firstname'。

我希望使用C#LINQ返回一个列表。

我不知道如何访问配置文件表中的birthday属性,具体取决于它在db表中的存储方式,即名称/值列

3 个答案:

答案 0 :(得分:3)

我认为您应该考虑更改为经过大幅改进的基于表的提供程序:

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

这允许您以标准SQL方式将数据分成每个表列的一个值。这比标准提供程序执行得更少,它解决了查询“个人档案”数据库的问题。

转换数据库需要花费少量工作,但在代码方面,只需要在不同的提供程序中进行配置,其他任何内容都不应该更改。这是提供者模式的优点。

答案 1 :(得分: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())))

答案 2 :(得分:0)

Profile机制通过拆分每个名称/值对来解析值,然后单独解析它们。您可以编写代码来自己完成。或者您可以遵循@Daniel的方法并使用替代提供程序,这使生活更轻松。开箱即用的提供程序很难用字符串连接。

此代码是否在同一个应用中?如果您正在谈论C#,您可以使用配置文件对象来检索它...这段代码的上下文是什么?批量服务?