c# - 无法将类型 'System.Int32' 转换为类型 'System.Object'。 LINQ to Entities 仅支持转换实体数据模型基元类型

标签 c# asp.net gridview linq-to-entities

我需要一些关于如何修复以下错误的建议:“无法将类型‘System.Int32’转换为类型‘System.Object’。LINQ to Entities 仅支持转换实体数据模型基元类型。”

我有一个 gridview(RadGrid,但这并不重要),它在加载时与数据绑定(bind),一切正常。数据与以下代码绑定(bind):

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.DataSource 中,在这一行中,我确信它会发生,因为我没有将 ticketList 转换为列表。我没有这样做的原因是因为我得到了另一个错误(“无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.List'。存在显式转换(你错过了吗 Actor ?))

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;

关于c# - 无法将类型 'System.Int32' 转换为类型 'System.Object'。 LINQ to Entities 仅支持转换实体数据模型基元类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874304/

相关文章:

c# - System.DirectoryServices.Protocols Paged get all users 代码突然停止获取超过第一页的用户

c# - 创建从 IBlahblah 继承的所有类的集合

c# - 加密 web.config 文件

java - 当方向改变时,如何在 GridView 中保存位图图像的状态?

c# - 为什么在 DI 中使用接口(interface)而不是抽象类?

c# - 从字符串中删除字母字符和空格

c# - jQuery 对话框在 Response.TransmitFile 之后不会从代码隐藏中关闭

c# - 如何在 css 中突出显示 "onmouseover"?

c# - 如何序列化一个 ViewState 对象

c# - GridView 分页不起作用?