Используя запрос Linq, когда мы получаем запись по идентификатору, как я могу присвоить это значение другому столбцу?

2

Здесь я написал простой, where условие linq-запроса я получаю данные из базы данных, но я хочу назначить эти данные другому столбцу.

Работник

public class Employee
{
        public string Id{ get; set; }
        public string Name{ get; set; }
        public string Email{ get; set; }
}

Запрос Linq:

public Employee GetEnqDetails(int EnqId)
{
    if (EnqId != null)
    {
        var x = from n in db.Employee 
                where n.Id == EnqId
                select n;
        return x.FirstOrDefault();
    }
    else
    {
        return null;
    }
}

Здесь из таблицы Employee любые данные, которые я получаю, я хочу назначить эти данные другому классу в качестве

public class EmailContent
{
        public string Subject { get; set; }
        public string Body { get; set; }
}

Здесь subject = x.Name + "" x.Email Как я могу присвоить это значение

  • 0
    а какое содержимое тела вроде body = x.?
  • 0
    var first = x.FirstOrDefault(); теперь создайте EmailContent из этого var ec = new EmailContent(); ec.Subject= first.Name ...
Теги:
linq-to-entities

2 ответа

1
Лучший ответ

Таким образом, вы получаете данные Employee из метода GetEnqDetails() вы можете создать новый экземпляр элемента EmailContent с этими подробностями:

var employ = GetEnqDetails(101);
if (employ != null)
{
    EmailContent emc = new EmailContent() { Subject = String.Format("{0} {1}", employ.Name, employ.Email), Body = "" }; 
    // proceed with emc 
}

Если вы не хотите использовать отфильтрованные сведения о сотрудниках, только требование заключается в EmailContent экземпляра EmailContent с EmailContent о сотрудниках, то вы можете изменить метод следующим образом:

public static EmailContent GetEnqDetails(string EnqId)
{
    if (EnqId != null)
    {
        return db.Employee.Where(n => n.Id == EnqId)
                          .Select(x => new EmailContent()
                          {
                              Subject = String.Format("{0} {1}",
                              x.Name, x.Email),
                              Body = ""
                          }).FirstOrDefault();
    }
    else
    {
        return null;
    }
}

Обновление по комментариям:

Существует несоответствие DataType, как указано в комментарии, то есть EnqId является int и n.Id является строкой. Пожалуйста, исправьте их соответственно. Я просто изменил параметр как строку в моем коде. Поскольку сравнение (if (EnqId != null)) означает меньшее значение, это целое число. Поэтому, если вы переадресовываете с int удалите условие

  • 0
    @sujith, ваш код не компилируется. bcoz EnqId - это int, а n.Id - это строка. здесь вы получили ошибку времени компиляции
  • 0
    @ershoaib: абсолютно, я обновил ответ с моими комментариями. Спасибо
1

Прежде всего, ваш метод метода GetEnqDetails должен GetEnqDetails string потому что ваш класс Id in Employee имеет string DataType.

И тогда вы должны проецировать свой результат запроса в свой класс EmailContent например

public EmailContent GetEnqDetails(string EnqId)
{
    if (!string.IsNullOrEmpty(EnqId))
    {
        var x = from n in db.Employee
                        where n.Id == EnqId
                        select new EmailContent { Subject = n.Name + " " + n.Email, Body = "get any property by typing n." };
        return x.FirstOrDefault();
    }
    else
    {
        return null;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню