从一个对象投射到另一个对象

问题描述:

我正在开发一个邮件列表应用程序,我们可以在发送完整列表之前测试测试电子邮件以检查格式和内容。从一个对象投射到另一个对象

我有“活的”列表和“测试”列表设置相同。我正在使用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(); 
    } 
+0

你的意思是`在db.TestEmailLists`不是`db.EmailList`根据你的问题 – 2011-01-21 22:17:17

你可以尝试

GetAllActiveEmailAddresses(mailingList).ToList<EmailList>(); 
+1

一个`名单`不是`可查询`。 – 2011-01-21 16:42:29

您可以添加一个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 
    }); 
} 

在选择部分,您可以匹配从您测试电子邮件类型的字段到您的常规电子邮件类型。