2011-01-21 135 views
0

我正在開發一個郵件列表應用程序,我們可以在發送完整列表之前測試測試電子郵件以檢查格式和內容。從一個對象投射到另一個對象

我有「活的」列表和「測試」列表設置相同。我正在使用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]'。

此外,如果有更好的方法來做到這一點,請賜教。

回答

0

@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

0

你可以嘗試

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

一個`名單`不是`可查詢`。 – 2011-01-21 16:42:29

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

在選擇部分,您可以匹配從您測試電子郵件類型的字段到您的常規電子郵件類型。