我正在开发一个邮件列表应用程序,我们可以在发送到完整列表之前测试测试电子邮件以检查格式和内容。
我有“实时”列表表和“测试”列表表设置相同。我使用Linq2SQL从SQL Server 2005进行数据访问。
我避免重复代码的思维过程是通过bool来指示测试批次。我现在遇到的问题是如何将TestEmailList
对象转换为我的EmailList
对象(两者都被定义为相同)。
IQueryable<EmailList> emailAddresses = null;
if (!isTestSend)
{
// Commented out to avoid an "oops"
//emailAddresses = emailRepository.GetAllActiveEmailAddresses(mailingList);
}
else
{
emailAddresses = (IQueryable<EmailList>)testEmailRepository.GetAllActiveEmailAddresses(mailingList);
}
尝试上述代码时收到以下错误消息。
无法转换类型为'System.Data.Linq.DataQuery
1[CivicCenterEventEmail.Models.TestEmailList]' to type 'System.Linq.IQueryable
1 [CivicCenterEventEmail.Models.EmailList]'的对象。
另外,如果有更好的方法,请赐教。
答案 0 :(得分:3)
您可以添加select语句来更改数据类型。
IQueryable<EmailList> emailAddresses = null;
if (!isTestSend)
{
// Commented out to avoid an "oops"
//emailAddresses = emailRepository.GetAllActiveEmailAddresses(mailingList);
}
else
{
emailAddresses = testEmailRepository.GetAllActiveEmailAddresses(mailingList)
.Select(e=> new EmailList
{
EmailListField1 = e.Field1,
EmailListField2 = e.Field2
});
}
在选择部分中,您可以将测试电子邮件类型的字段与常规电子邮件类型匹配。
答案 1 :(得分:0)
你可以试试
GetAllActiveEmailAddresses(mailingList).ToList<EmailList>();
答案 2 :(得分:0)
List<EmailAddressList> emailAddresses = null;
if (!isTestSend)
{
// Commented out to avoid an "oops"
//emailAddresses = emailRepository.GetAllActiveEmailAddresses(mailingList);
}
else
{
emailAddresses = testEmailRepository.GetAllActiveEmailAddresses(mailingList);
}
然后在我的数据库的Repository对象中,我做了以下内容:
public List<EmailAddressList> GetAllActiveEmailAddresses(int groupId)
{
return (from e in db.TestEmailLists
where e.AccountStatus == true && e.GroupId == groupId
select new EmailAddressList
{
EmailId = e.EmailId,
Email = e.Email,
AccountStatus = e.AccountStatus,
ContactName = e.ContactName,
SignupDate = e.SignupDate,
TextOnly = e.TextOnly,
GroupId = e.GroupId
}).ToList();
}