从一个对象转换为另一个对象

时间:2011-01-21 16:28:34

标签: .net linq-to-sql casting

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

我有“实时”列表表和“测试”列表表设置相同。我使用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]'的对象。

另外,如果有更好的方法,请赐教。

3 个答案:

答案 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)

@Becuzz让我走上了正确的道路,但没有奏效。最后做的是使用与测试列表和实时列表相同的设置制作另一个对象,并将所有数据作为List&lt;&gt;填充到这个新对象中。

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();
    }