从一个对象投射到另一个对象
我正在开发一个邮件列表应用程序,我们可以在发送完整列表之前测试测试电子邮件以检查格式和内容。从一个对象投射到另一个对象
我有“活的”列表和“测试”列表设置相同。我正在使用Linq2SQL从SQL Server 2005进行数据访问。
我的思考过程避免重复的代码是传递一个布尔值来指示测试批次。我现在遇到的问题是如何将我的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]'。
此外,如果有更好的方法来做到这一点,请赐教。
@Becuzz让我走上了正确的轨道,但并不完美。最终做的是用与测试列表和实况列表相同的设置制作另一个对象,并将所有数据填入这个新对象中,作为列表<>。
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();
}
你可以尝试
GetAllActiveEmailAddresses(mailingList).ToList<EmailList>();
一个`名单
您可以添加一个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
});
}
在选择部分,您可以匹配从您测试电子邮件类型的字段到您的常规电子邮件类型。
你的意思是`在db.TestEmailLists`不是`db.EmailList`根据你的问题 – 2011-01-21 22:17:17