2016-03-24 18 views
0

Test edilen LINQPad (https://www.linqpad.net/) 'da oluşturduğum ve çalıştığı tüm sorularıma aşağıdaki sorgularım var. LINQ Sorguları LINQ Pad'de çalışmıyor Not:

var UserEvents = from e in _context.Events 
       join s in _context.Shifts on e.ShiftID equals s.SHFID 
       where e.UID == userID 
       select new UserEvents 
       { 
        EVTID = e.EVTID, 
        UID = e.UID, 
        ShiftID = e.ShiftID, 
        EVTDate = e.EVTDate, 
        Notes = e.Notes, 
        AreaID = s.Area.AreaID, 
        AreaDesc = s.Area.AreaDesc, 
        CPYDesc = s.Area.Company.CPYDesc, 
        StartTime = s.StartTime, 
        EndTime = s.EndTime, 
        RequiredResources = s.RequiredResources, 
        ShiftDesc = s.ShiftDesc, 
        ShiftDayOfWeek = s.ShiftDayOfWeek 
       }; 

Ben bunu üzerine taşındığında VS o Shift Alanı tanımını yoktu şikayet etti. O Şimdi bir public List<Shift> SHFID { get; set; }

ile Alanlarda belirtilen şekilde

Bu ben doldurma olmadan bu sorgu çalışması için nasıl anlamaya çalışırken oldukça şaşırıp gerçek Shift.cs Alanı'na açık bir beyanı içermez ise benim tablo yapısı (ilk kodu kullanarak Entity.Framework)

Shifts.cs

public class Shift 
{ 
    [Key] 
    public int SHFID { get; set; } 
    public TimeSpan StartTime { get; set; } 
    public TimeSpan EndTime { get; set; } 
    public int RequiredResources { get; set; } 
    public string ShiftDesc { get; set; } 
    public string ShiftDayOfWeek { get; set; } 
    public DateTime ShiftExDateStart { get; set; } 
    public DateTime ShiftExDateEnd { get; set; } 
    public int ShiftExLevel { get; set; } 
    public TimeSpan ShiftExStartTime { get; set; } 
    public TimeSpan ShiftExEndTime { get; set; } 
} 

Area.cs

temelde yapmaya çalışıyorsun ne
+0

Eh, 'Shift' için' Alan' özelliği ekleyin. EF, her iki sınıf arasında 1: n (Alan: Shift) ilişkisi olarak seçmeli ve bunu bir SQL birleştirmesine çevirmelidir. –

+0

Beyannamede olduğu gibi iyi bir fikir gibi görünüyor. Sadece bir alan mı ilan edersin? ya da başka bir şekilde bildirmek mi? – Caz1224

+0

[Entity Framework'de gezinme özellikleri] üzerinde okuma yapmanızı öneririm (https://msdn.microsoft.com/en-us/data/jj713564.aspx). Burada açıklamak için çok fazla var. –

cevap

0

Eh bölgenin özelliklerini almak için o nesneyi kullanmak gerekir, Shift bir özellik Alanını ekleyin. EF, her iki sınıf arasında 1: n (Alan: Shift) ilişkisi olarak seçmeli ve bunu bir SQL birleştirmesine çevirmelidir. - Gert Arnold Bu benim sorunu giderilmiştir

, benim sınıf aradığım navigasyon izin için public Area Area { get; set; } ekleme

.

0

veri modelleri bir alan 1-> n ilişkisidir vardiya içerebilir söylemek beri, yanlış kayması nesne AreaID = s.Area.AreaID, alanı özelliğini olsun. Sen e.AreaId üzerinde alanlara başka burada katılmak ekleyip

var UserEvents = from e in _context.Events 
       join s in _context.Shifts on e.ShiftID equals s.SHFID 
       join a in _context.Areas on e.AreaID equals a.AreaID 
       where e.UID == userID 
       select new UserEvents 
       { 
        EVTID = e.EVTID, 
        UID = e.UID, 
        ShiftID = e.ShiftID, 
        EVTDate = e.EVTDate, 
        Notes = e.Notes, 
        AreaID = a.AreaID, 
        AreaDesc = a.AreaDesc, 
        CPYDesc = a.Company.CPYDesc, 
        StartTime = s.StartTime, 
        EndTime = s.EndTime, 
        RequiredResources = s.RequiredResources, 
        ShiftDesc = s.ShiftDesc, 
        ShiftDayOfWeek = s.ShiftDayOfWeek 
       }; 
+0

Bu noktadan navigasyonun imkansız olduğunu mı düşünüyorsunuz? LINQ fikrinin, eski birleşme yönteminin tersine navigasyonu sağlamak olduğunu düşünmüştüm. LINQPad kullanarak veritabanı seviyesinde olabildiğince iki yönlü navigasyona izin verecek Alan veya Shift tanımını düzenlemenin bir yolu olabileceği sonucuna vardım. – Caz1224

+0

İstediğinizi elde etmek için, bölgelere (tembel yükleme adı verilen) Vardiyalar için sanal nesneler ayarlamanız gerekir ve bu da linq'e kadar bile değildir. Şu anda başka bir üye eklemeniz gerekecek. –

+0

Ayrıca, ilişkiler için ForeignKey öznitelikleri eklemeniz gerekecek, düzenlenmiş cevabı kontrol etmeyi unutmayın, güncellenmiş sorgunuz böyle bir şeye benzemelidir. Alan nesnesinin burada sağladığınız gibi olması durumunda şirketi alan nesneden alabileceğinizi düşünmüyorum. –