Nicht in der Lage einen Konstanten Wert vom Typ 'Anonymen Typ'. Nur primitive Typen oder Aufzählungstypen unterstützt in diesem Zusammenhang

Ich bin extrem neu auf linq - und entity framework. Ich bin versucht zu lösen ein problem, warum das unten nicht funktioniert. Die Fehler produziert, ist "Nicht in der Lage einen Konstanten Wert vom Typ 'Anonymen Typ'. Nur primitive Typen oder Aufzählungstypen unterstützt in diesem Zusammenhang."

Ich hab das versucht so viele verschiedene Möglichkeiten, aber immer noch einen Fehler in Bezug auf primitive Typen. Ich wäre sehr dankbar, wenn jemand könnte einen Blick auf den code unten, und hoffentlich zeigen, wo es falsch läuft.

        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

Habe ich einen anderen Ansatz mit dieser jetzt durch das erstellen einer Ansicht so brauche ich nicht mehr zu tun, das Kreuz Kontext schließt sich in EF. Ich hatte gehofft, Sie möglicherweise in der Lage zu helfen, mit dem unten.

Wenn ich objectQuery.ToTraceString() es bietet mir mit Gültiger SQL, die Datensätze zurückgibt, die in die db, jedoch ist die resLst in Entity Framework kommt immer wieder bei 0 an. Gibt es etwas offensichtlich, warum dies passiert ist?

  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();
  • Für das update würde ich empfehlen, die Sql Server Profiler und der Erfassung der sql-EF ist tatsächlich an den server senden.
  • Cheers mate. Dumme Verbindungszeichenfolge Problem. Sie Leben und lernen 🙂
InformationsquelleAutor JIbber4568 | 2013-08-02
Schreibe einen Kommentar