我需要一些关于如何修复以下错误的建议:“无法将类型‘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/