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

3
我需要一些关于如何修复以下错误的建议: "无法将类型 'System.Int32' 强制转换为类型 'System.Object'。LINQ to Entities 仅支持转换实体数据模型基元类型。"
我有一个网格视图(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
尝试使用以下代码:TicketNumber = t.idNadredeniTicket.ToString() + "-" + t.RedniBroj.ToString() - Ankur
在你的代码行之后,我遇到了这个错误:“LINQ to Entities不识别'System.String ToString()'方法,而且该方法无法转换为存储表达式。” - wegelagerer
将这两个东西分别放在匿名对象的不同属性中,然后使用Eval方法在数据网格中显示这两个属性的组合字符串,怎么样? - Ankur
@Ankur,我不确定你的意思。你知道类似的例子吗? - wegelagerer
1个回答

4
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;

谢谢!那就是解决方案!;) - wegelagerer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接