παπι Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 Πως κανουμε transformation σε valuetype; Στο κατω σνιπ, πως θα αποφυγω το δευτερο transformation??? Το LatLng ειναι ValueType. class DriverProfileDB { public static List<DriverProfile> GetDrivers(long storeId) { using (var db = new PrimaryDatabase()) { var q = from dp in db.td_driverprofiles join shift in db.td_shifts on dp.EmployeeId equals shift.EmployeeId join emp in db.td_employee on dp.EmployeeId equals emp.Id where shift.StoreId == storeId && shift.Active > 0 select new { Id = dp.Id, lat = dp.CurrentPositionLat ?? 0, lng = dp.CurrentPositionLng ?? 0, ETA = dp.ETA ?? DateTime.MaxValue,//todo check calander Name = emp.Nick, SpeedFactor = dp.SpeedFactor, StopTimeOrder = dp.StopTimeOrder, StopTimeStore = dp.StopTimeStore, }; return q.ToList() .Select(x => new DriverProfile { Id = x.Id, CurrentPosition = new LatLng(x.lat,x.lng), ETA = x.ETA, Name = x.Name, SpeedFactor = x.SpeedFactor, StopTimeOrder = x.StopTimeOrder, StopTimeStore = x.StopTimeStore }) .ToList(); } } }
albNik Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 Δοκίμασες να δημιουργήσεις κατευθείαν το DriverProfile στην πρώτη select και δεν δούλεψε?
παπι Δημοσ. 17 Οκτωβρίου 2016 Μέλος Δημοσ. 17 Οκτωβρίου 2016 Αυτο φτιαχνεται. Η LatLng δεν φτιαχνεται οσο ειναι σε iqueryable
albNik Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 Αυτό δεν παίζει? .... .... select new DriverProfile { Id = dp.Id, CurrentPosition = new LatLng { Lat= dp.lat, Lng= dp.lng }, ETA = dp.ETA ?? DateTime.MaxValue,//todo check calander Name = emp.Nick, SpeedFactor = dp.SpeedFactor, StopTimeOrder = dp.StopTimeOrder, StopTimeStore = dp.StopTimeStore, }; return q.toList();
παπι Δημοσ. 17 Οκτωβρίου 2016 Μέλος Δημοσ. 17 Οκτωβρίου 2016 Οχι, θελει ναναι object, ουτε Func παιζει.
defacer Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 Το δεύτερο projection δε νομιζω οτι μπορείς να το αποφύγεις, αλλά τι σε πειράζει; Το πρώτο ToList() που κάνεις από την άλλη όντως πειράζει, αλλά μπορείς να το αντικαταστήσεις πιο καλά με AsEnumerable(). Έτσι κι αλλιώς όταν φτάνεις να καλείς constructors φανερά έχεις περάσει το σημείο που τα πράγματα μπορούν να είναι queryable. 1
παπι Δημοσ. 17 Οκτωβρίου 2016 Μέλος Δημοσ. 17 Οκτωβρίου 2016 Ξερω γω; Απλα μου φαινεται περιεργο να γραφω δυο φορες το ιδιο πραμα. Το αλλαξα σε enumerable. Και κατι αλλο, για να μην ανοιγω αλλο θεμα. public static void UpdateTripAndETA(Order order, int tripId) { using (var db = new PrimaryDatabase()) { var tmp = new td_orders { TD_Id = order.Id, TD_ETA = order.ETA, TD_TripId = tripId, TD_RawAddress = "", TD_Status = "" }; db.td_orders.Attach(tmp); db.Entry(tmp).Property(x => x.TD_ETA).IsModified = true; db.Entry(tmp).Property(x => x.TD_TripId).IsModified = true; //db.Entry(tmp).Property(x => x.TD_Status).IsModified = false; //db.Entry(tmp).Property(x => x.TD_RawAddress).IsModified = false; db.SaveChanges(); } } γιατι δεν μπορω να τα αφησω null ;
Papakaliati Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 Το δευτερο δεν νομιζω οτι γινεται να το αποφυγεις, αλλα στο πρωτο νομιζω μπορεις να κανεις απλα let Id = dp.Id, etc etc. , εχω την εντυπωση οτι ειναι πιο φτηνο το let απο το new object. Δεν εχω windows μπροστα μου ομως για να το τσεκαρω .
παπι Δημοσ. 17 Οκτωβρίου 2016 Μέλος Δημοσ. 17 Οκτωβρίου 2016 το let απο F# δεν ειναι; Ok ειναι και σε linq, θα το δω μετα
Papakaliati Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 το let απο F# δεν ειναι; Ναι, αλλα το χρησιμοποιηεις και στα queries σε c#, πχ μπορεις να κανεις from x in xxx let x = xxx.Id + 105, where x > whatever ενα πραγμα.
defacer Δημοσ. 17 Οκτωβρίου 2016 Δημοσ. 17 Οκτωβρίου 2016 Το δευτερο δεν νομιζω οτι γινεται να το αποφυγεις, αλλα στο πρωτο νομιζω μπορεις να κανεις απλα let Id = dp.Id, etc etc. , εχω την εντυπωση οτι ειναι πιο φτηνο το let απο το new object. Δεν εχω windows μπροστα μου ομως για να το τσεκαρω . Το let είναι ακριβώς το ίδιο πράγμα με το να κάνεις select into new anon type. Στη φάση που είσαι ακόμα queryable φυσικά αυτό δε σε απασχολεί γιατί δεν κάνεις instantiate τίποτα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα