Преобразование анонимного типа в номинальный тип - PullRequest
1 голос
/ 09 сентября 2011

У меня есть метод, который должен возвращать объект Rpt_IncidentWithConfirm, но я понятия не имею, как легко преобразовать его в один. Единственный способ, которым я знаю, как он делает то, что у меня ниже, очень неэффективно.

    public Rpt_IncidentWithConfirm GetIncident(string IncidentID)
    {
        db = new IncidentsDataContext();

        var incident = (from i in db.Rpt_IncidentWithConfirms
                       join d in db.DropDowns on i.incidentType equals d.value
                       where i.incidentID == Convert.ToInt32(IncidentID)
                       select new
                       {
                           i, d.text
                       }).SingleOrDefault();
        Rpt_IncidentWithConfirm r = new Rpt_IncidentWithConfirm();
        // I didn't want to have to type all this here because I have too many fields to map.

        r.bhaIncident = incident.i.bhaIncident;
        r.bitType = incident.i.bitType;
        r.Bottom_Connection = incident.i.Bottom_Connection;
        // And so on.


        return r;
    }

Ответы [ 4 ]

3 голосов
/ 09 сентября 2011

Вы можете создать экземпляр объекта Rpt_IncidentWithConfirm непосредственно в выражении запроса и ссылаться только на те значения базы данных, которые вам нужны:

var incident = (from i in db.Rpt_IncidentWithConfirms
                join d in db.DropDowns on i.incidentType equals d.value
                where i.incidentID == Convert.ToInt32(IncidentID)
                select new Rpt_IncidentWithConfirm
                {
                   bhaIncident = i.bhaIncident
                 , bitType = i.bitType
                 , Bottom_Connection = i.Bottom_Connection
                }).SingleOrDefault();
2 голосов
/ 09 сентября 2011

Не используйте anonymus type, вы можете использовать тип, который вы должны вернуть

 select new Rpt_IncidentWithConfirm 
                   {
                       // set all properties you need
                   }).SingleOrDefault();

Редактировать: Если ваш запрос относится к типу коллекции, которую вы хотите вернуть, вы можете просто использовать результат запроса:

 return db.Rpt_IncidentWithConfirms.Where( ... ).FirstOrDefault();

или если вам нужно значение текста, используйте:

//do something with incident.Text
return incident.i;
1 голос
/ 09 сентября 2011

Я действительно использовал ответ, указанный ниже, чтобы решить мою проблему. Это не совсем то, что я хотел сделать, но мне не нужно вводить все вручную. Вернуть результаты анонимного типа?

        public class IncidentWithDropDown
    {
        public Rpt_IncidentWithConfirm Incident { get; set; }
        public string IncidentTypeText { get; set; }
    }
    public IncidentWithDropDown GetIncident(string IncidentID)
    {
        db = new IncidentsDataContext();

        var incident = (from i in db.Rpt_IncidentWithConfirms
                       join d in db.DropDowns on i.incidentType equals d.value
                       where i.incidentID == Convert.ToInt32(IncidentID)
                       select new IncidentWithDropDown()
                       {
                           Incident = i,
                           IncidentTypeText = d.text
                       }).SingleOrDefault();

        return incident;
    }
0 голосов
/ 09 сентября 2011

вам не нужно создавать анонимный тип в select, просто создайте объект именованного типа вместо

public Rpt_IncidentWithConfirm GetIncident(string IncidentID)
    {
        db = new IncidentsDataContext();

        var return (from i in db.Rpt_IncidentWithConfirms
                       join d in db.DropDowns on i.incidentType equals d.value
                       where i.incidentID == Convert.ToInt32(IncidentID)
                       select new Rpt_IncidentWithConfirm(){

                           bhaIncident =i.bhaIncident,
                           bitType = i.bitType,
                           Bottom_Connection = i.Bottom_Connection,
                           // And so on.
                        }).SingleOrDefault()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...