Невозможно привести тип System.Int32 к типу System.Object.LINQ to Entities поддерживает только приведение типов примитивов Entity Data Model - PullRequest
2 голосов
/ 24 октября 2011

Мне нужен совет о том, как исправить следующую ошибку: «Невозможно привести тип System.Int32 к типу System.Object. LINQ to Entities поддерживает только приведение типов примитивов Entity Data Model.»

У меня есть gridview (RadGrid, но это не важно), который связан с загрузкой данных, и все работает отлично.Данные связываются с помощью следующего кода:

var ticketList = (from t in db.Ticket
                          select t).ToList();

        int idKontakt = Convert.ToInt32(Session["authenticatedUI"]);

        Kontakt kontakt = new Kontakt();
        kontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idKontakt);

        gvTicketi.DataSource = from t in ticketList
                               where t.idKontakt == idKontakt
                               orderby t.idTicket, t.RedniBroj, t.DatumPrijave
                               select new
                               {
                                       t.idTicket,
                                       t.idFirma,
                                       t.idKontakt,
                                       t.idManager,
                                       t.idNadredeniTicket,
                                       TicketNumber = t.idNadredeniTicket + "-" + t.RedniBroj,
                                       t.Biljeske,
                                       t.DatumDo,
                                       t.DatumPrijave,
                                       t.OpciPrioritet,
                                       t.Opis,
                                       t.OpisZatvoren,
                                       t.Prioritet,
                                       t.Status,
                                       t.Tip,
                                       t.VrstaPrijave,
                                       t.Zatvoren,
                                       t.DatumZatvaranja,
                                       t.IzdanRacun,
                                       NazivKontakta = t.Kontakt == null ? "Bez kontakta" : t.Kontakt.Ime + " " + t.Kontakt.Prezime,
                                       NazivTvrtke = t.Firma.Naziv
                                   };

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

Этот код я использую для фильтрации вида сетки:

var ticketList = from t in db.Ticket
                         select t;

        if (txtBrojTicketaGlavni.Text != string.Empty)
        {
            int glavniBroj = Convert.ToInt32(txtBrojTicketaGlavni.Text);
            ticketList = ticketList.Where(t => t.idNadredeniTicket == glavniBroj);
        }


        int idKontakt = Convert.ToInt32(Session["authenticatedUI"]);

        Kontakt kontakt = new Kontakt();
        kontakt = db.Kontakt.SingleOrDefault(k => k.idKontakt == idKontakt);

        ticketList.ToList();

        gvTicketi.DataSource = from t in ticketList
                               orderby t.idTicket, t.RedniBroj, t.DatumPrijave
                               select new
                               {
                                   t.idTicket,
                                   t.idFirma,
                                   t.idKontakt,
                                   t.idManager,
                                   t.idNadredeniTicket,
                                   TicketNumber = t.idNadredeniTicket + "-" + t.RedniBroj,
                                   t.Biljeske,
                                   t.DatumDo,
                                   t.DatumPrijave,
                                   t.OpciPrioritet,
                                   t.Opis,
                                   t.OpisZatvoren,
                                   t.Prioritet,
                                   t.Status,
                                   t.Tip,
                                   t.DatumZatvaranja,
                                   t.VrstaPrijave,
                                   t.Zatvoren,
                                   t.IzdanRacun,
                                   NazivKontakta = t.Kontakt == null ? "Bez kontakta" : t.Kontakt.Ime + " " + t.Kontakt.Prezime,
                                   NazivTvrtke = t.Firma.Naziv
                               };

        if (kontakt.idOvlasti == 2)
        {
            gvTicketi.MasterTableView.GetColumn("CloseColumn").Visible = false;
        }

        gvTicketi.DataBind();

Я понял, что проблема в gvTicketi.DataSource, в этой строке, и я уверен, что это происходит, потому что я не преобразовал ticketList в список.Причина, по которой я этого не сделал, заключается в том, что тогда я получаю другую ошибку («Не удается неявно преобразовать тип« System.Collections.Generic.IEnumerable »в« System.Collections.Generic.List ». Существует явное преобразование (вы пропустили)литой?) ")

TicketNumber = t.idNadredeniTicket + "-" + t.RedniBroj,

Любая помощь будет оценена!Спасибо!

1 Ответ

4 голосов
/ 24 октября 2011

Тип ticketList равен IQueryable<...>, что означает представление запроса на стороне клиента.

Эта строка:

ticketList.ToList()

выполняет запрос на сервере базы данных, но результаты не сохраняются.

Эта строка:

gvTicketi.DataSource = from t in ticketList
                       orderby t.idTicket, ...

пытается установить DataSource на другой IQueryable.

Попробуйте:

// construct the query ( query is IQueryable<> )
var query = from t in ticketList
            orderby t.idTicket, ...

// execute on db server ( results is List<> )
var results = query.ToList();

// set DataSource
gvTicketi.DataSource = results;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...