Tôi cực kỳ mới với linq
và khung pháp nhân. Tôi đang cố gắng giải quyết một vấn đề là tại sao bên dưới không hoạt động. Lỗi được tạo ra là "Không thể tạo ra một giá trị không đổi của kiểu 'Kiểu ẩn danh'. Chỉ có các kiểu nguyên thủy hoặc kiểu liệt kê mới được hỗ trợ trong ngữ cảnh này."Không thể tạo giá trị không đổi của loại 'Kiểu ẩn danh'. Chỉ các loại nguyên thủy hoặc kiểu liệt kê mới được hỗ trợ trong ngữ cảnh này
Tôi đã thử quá nhiều cách khác nhau nhưng vẫn gặp lỗi liên quan đến các kiểu nguyên thủy. Tôi sẽ đánh giá rất cao nếu ai đó có thể xem xét mã dưới đây và hy vọng chỉ ra nơi nó đang đi sai.
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();
}
}
CẬP NHẬT
Tôi đã thực hiện một cách tiếp cận khác nhau với này ngay bây giờ bằng cách tạo ra một cái nhìn vì vậy tôi không còn cần phải làm bối cảnh xuyên tham gia trong EF. Tôi đã hy vọng bạn có thể giúp đỡ với bên dưới.
Khi tôi chạy objectQuery.ToTraceString() nó cung cấp cho tôi SQL hợp lệ trả về các bản ghi trong db, tuy nhiên resLst trong EntityFramework luôn quay trở lại với 0. Có điều gì rõ ràng là tại sao điều này xảy ra không?
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();
Để cập nhật, tôi khuyên bạn nên sử dụng [Sql Server Profiler] (htt p: //msdn.microsoft.com/en-us/library/ms181091.aspx) và chụp sql mà EF thực sự đang gửi đến máy chủ. –
Chúc mừng bạn đời. Sự cố chuỗi kết nối ngớ ngẩn. Bạn sống và học :-) – JIbber4568