Sono estremamente nuovo a linq
e framework di entità. Sto cercando di risolvere un problema sul perché il sotto non funziona. L'errore prodotto è "Impossibile creare un valore costante di tipo" Tipo anonimo ". Solo i tipi primitivi o i tipi di enumerazione sono supportati in questo contesto."Impossibile creare un valore costante di tipo "tipo anonimo". Solo i tipi primitivi o tipi di enumerazione sono supportati in questo contesto
Ho provato questo tanti modi diversi ma ancora ottenere un errore relativo ai tipi primitivi. Apprezzerei molto se qualcuno potesse dare un'occhiata al codice qui sotto e spero che indichi dove sta andando male.
public Entities.BikeData[] GetBikesWithExpiredSyncDeadline(int noOfDays) {
using (OfficeEntities cxt = GetContext())
using (ReportingEntities RepCxt = GetReportingContext()) {
Data.Repository.Abstract.IBikeRepository BikeRepos = new Data.Repository.Concrete.BikeRepository();
var details = (from sd in cxt.BikeDetails
where sd.autoreminder == true
&& (sd.lastremindersent == null || sd.lastremindersent < EntityFunctions.AddDays(DateTime.UtcNow, noOfDays * -1))
&& (sd.emailaddress != null && sd.emailaddress.Trim() != "")
select new {
Serial = sd.Serial,
EmailAddress = sd.emailaddress
}).ToList();
var resLst = (from r in RepCxt.RegisteredBikes
join d in details on r.Serial equals d.Serial
join cs in cxt.CompanySettings.ToList() on r.CompanyID equals cs.CompanyID
where (!r.lastupdate.HasValue || r.lastupdate < EntityFunctions.AddDays(DateTime.UtcNow, cs.AutoNotificationFrequency * -1))
select new Entities.BikeData {
ID = r.ID,
Name = r.Ship,
Serial = r.Serial,
LastUpdate = r.lastupdate,
DaysSinceLastSync = (r.lastupdate.HasValue? EntityFunctions.DiffDays(r.lastupdate.Value, DateTime.UtcNow).Value : -1),
EmailAddress = (d.EmailAddress == null ? string.Empty : (String.IsNullOrEmpty(d.EmailAddress) ? r.ShipEmailAddress : d.EmailAddress))
});
return resLst.ToArray();
}
}
UPDATE
ho preso un approccio diverso con questo ora con la creazione di una vista così non ho più bisogno di fare il contesto croce si unisce a EF. Speravo potessi essere in grado di aiutarti con il seguito.
Quando eseguo objectQuery.ToTraceString() mi fornisce un SQL valido che restituisce i record nel db, tuttavia il resLst in EntityFramework torna sempre con 0. C'è qualcosa di ovvio sul perché questo sta accadendo?
var resLst = (from ls in cxt.BikeLastUpdates
where (!ls.lastupdate.HasValue || ls.lastupdate < EntityFunctions.AddDays(DateTime.UtcNow, ls.AutoNotificationFrequency * -1))
&& (ls.autoreminder ==true)
&& (ls.lastremindersent == null || ls.lastremindersent < EntityFunctions.AddDays(DateTime.UtcNow, 3 * -1))
&& (ls.emailaddress !=null && ls.emailaddress.Trim() != "")
select new Entities.BikeData{
ID = (ls.ID ?? new Guid()),
Name = ls.Bike,
Serial = ls.Serial,
LastUpdate = ls.lastupdate,
EmailAddress = (String.IsNullOrEmpty(ls.emailaddress) ? ls.ShipEmailAddress : ls.emailaddress)
});
var objectQuery = resLst as ObjectQuery;
return resLst.ToArray();
Per il vostro aggiornamento suggerirei di usare [Sql Server Profiler] (htt p: //msdn.microsoft.com/en-us/library/ms181091.aspx) e catturare lo sql che EF sta effettivamente inviando al server. –
Buongiorno amico. Sciocco problema di stringhe di connessione. Vivi e impari :-) – JIbber4568