Храните список объектов в столбце и запускайте почту — C#, SQL Server

#c# #asp.net #sql-server

Вопрос:

Попытка сохранить список пользователей (объектов) в базе данных и отправить письмо получателю с тем же списком. Я использую MSSQL и C# для своего проекта. Приведенный ниже код успешно выполняется, если я намерен сохранить только одного пользователя. Но у меня возникли проблемы с сохранением списка пользователей. Я прошу помочь мне с некоторыми идеями о том, как достичь следующего. Спасибо.

 public class ExportService{
public string SendImportStatus(List<Import> users)
        {
            Let<Notification>().SaveListToSendEmail(users);
            return null;
        }
}

public class Notification{
public void SaveListToSendEmail(List<Import> users)
        {
            if (IsNullOrEmpty(users))
            {
                return;
            }
            SendEmailBody(actedBy, users);
        }
}

 private void SendEmailBody(List<Import> users)
        {
            var getManagers = Let<User>().GetAll();
            var type = NotificationType.ModuleImport;
            var recipientEmails = getManagers .Select(model => model.Email);
            var emailToList = string.Join(";", recipientEmails);
            var template = Let<EmailTemplate>().GetItemByCode(EnumHelper.GetDescription(type));

            var fileName = users.Select(x => x.FileName).First();
            var notification = new NotificationM()
            {
                Type = type,
                To = emailToList
            };

            notification.Value = new
            {
                ModuleCode = fileName,
                list = users //[{"Id":"A","Status":"Success},{"Id":"B","Status":"Fail"},..]
            };

            var recipient = BuildRecipient(template, notification);
            Let<Recipient>().Save(recipient, actedBy);
        }
}
 

Построение получателя с вышеуказанными данными.

 protected RecipientDM BuildRecipient(EmailTemplateDM template, NotificationM notificationM)
        {
            var subject = StringHelper.Fill(template.GetSubject(), notificationM.Value);
            var body = StringHelper.Fill(template.GetContent(), notificationM.Value);

            return BuildRecipient(notificationM.Id, notificationM.Type, recipient =>
            {
                recipient.To = notificationM.To;
                recipient.Cc = notificationM.Cc;
                recipient.Bcc = notificationM.Bcc;
                recipient.Subject = subject;
                recipient.Body = body;
            });
        }
 

Вспомогательный класс String, на данный момент он может хранить значение ModuleCode в базе данных. Но я не могу понять, как сохранить список.

 public static string Fill(object value)
        {
            var pairs = ConvertHelper.ToPairs(value);
            foreach (var key in pairs.Keys)
            {
                var text = pairs[key] == null ? string.Empty : pairs[key].ToString();
                template = Regex.Replace(template, $"##{key}##".Trim(), text, RegexOptions.IgnoreCase);
            }

            return template;
        }
 

В столбце базы Body данных это жестко закодировано, где ##ModuleCode## и ##list## будет заменено.

 '<p>Dear Manager(s), <br /> <br />Module - ##ModuleCode## -  is imported.<br /><br /><h3>Please find More Details below</h3><br />
  <table><tr><td>##list##<td></tr></table>
 

Я ожидаю следующего результата по электронной почте.

   Dear Manager(s), 

  Module - abc  is imported

  Please find more details below.
  
 ---------------
 | A | Success |
 | B | Failure |
 ---------------

 

Комментарии:

1. «У меня возникли проблемы с сохранением списка пользователей» — Какие конкретные «проблемы» у вас возникли? Если вам удалось успешно сохранить одну запись, что мешает вам повторить эту операцию?

2. @David Я получаю <table><tr><td> System.Collections.Generic.List`1[App.BLL.Notification SendEmail] </td</tr></tr></table> при сохранении его в моей базе данных.

3. Тогда, по-видимому, вы пытаетесь рассматривать весь список как одну запись, где вместо этого вам, вероятно, следует зацикливаться на списке и обрабатывать отдельные записи.

4. @Дэвид Да, я понимаю тебя, но я все еще немного сбит с толку. Ваша любезная помощь будет высоко оценена.

5. Код, показанный в вопросе, очень разрознен и полон опечаток, поэтому я мало что могу вам дать для конкретных рекомендаций. Сведите проблему только к тому, где вы используете List записи. Где это вообще есть в коде? Я не вижу List нигде? Хотя я вижу несколько вариантов использования object , что подразумевает, что вы вообще не полагаетесь на типы должным образом. Но, предположительно, где -то в вашем коде у вас есть несколько List записей, и вы передаете все List это своему процессу. Вместо этого напишите цикл для повторения этого List и передайте каждый объект этому вашему процессу.