无法将类型'System.Int32'转换为类型"系统对象"。LINQ to 实体仅支持强制转换实体数据模型基元类型



我需要一些关于如何修复以下错误的建议:"无法强制转换类型'System. "Int32'类型'System.Object'。LINQ到实体只支持转换实体数据模型原语类型。"

我有一个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
                                   };

页面加载时一切正常,但是当我尝试过滤数据源时出现问题。

这是我用来过滤gridview的代码:

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。我确信它会发生,因为我没有将ticketList转换为list。我没有这样做的原因是因为我得到了另一个错误("不能隐式转换类型"System.Collections.Generic。IEnumerable到System.Collections.Generic.List。存在显式转换(您是否缺少强制类型转换?)")

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

任何帮助将不胜感激!谢谢你!

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;

最新更新