Приведение от одного объекта к другому - PullRequest
0 голосов
/ 21 января 2011

Я работаю над приложением списка рассылки, где у нас есть возможность проверить тестовые электронные письма, проверить форматирование и прочее перед отправкой в ​​полный список.

У меня есть «живая» таблица списка и «тестовая» таблица списка, настроенные одинаково. Я использую 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 ]

3 голосов
/ 21 января 2011

Вы можете добавить оператор выбора для изменения типа данных.

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

В части выбора вы можете сопоставить поля из тестового типа электронной почты с обычным типом электронной почты.

0 голосов
/ 21 января 2011

@ 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 голосов
/ 21 января 2011

Вы можете попробовать

GetAllActiveEmailAddresses(mailingList).ToList<EmailList>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...