2011-01-21 16 views
0

私は、完全なリストに送信する前に、テスト電子メールをテストして書式をチェックし、内容をチェックできるメーリングリストアプリケーションに取り組んでいます。あるオブジェクトから別のオブジェクトへキャスト

"ライブ"リストテーブルと "テスト"リストテーブルが同じ設定になっています。私は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

@Becuzzは正しい軌道に乗ってくれましたが、うまく動作しませんでした。結局、テストリストとライブリストと同じ設定で別のオブジェクトを作成し、すべてのデータをこの新しいオブジェクトにList <>として埋めていました。

List<EmailAddressList> emailAddresses = null; 
if (!isTestSend) 
{ 
    // Commented out to avoid an "oops" 
    //emailAddresses = emailRepository.GetAllActiveEmailAddresses(mailingList); 
} 
else 
{ 
    emailAddresses = testEmailRepository.GetAllActiveEmailAddresses(mailingList); 
} 

は、その後、私は私のデータ層を持っている私のリポジトリオブジェクトに、私は次のようでした:

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.EmailList'内で' db.estEmailLists'を意味していません。 –

+0

はい、私の答えは修正されました。 –

0

あなたは、データ型を変更するには、SELECTステートメントを追加することができます

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

'一覧は' '照会可能'ではありません。 –

3

を試みることができます。

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

選択部分では、電子メールのタイプをテストするフィールドを通常の電子メールのタイプに一致させることができます。

関連する問題