2016-10-22 2 views
1

Ich habe keine Idee, wie man eine Tabelle mit vielen zu vielen Beziehungen verbindet und andere Tabellen einfügt und schließlich Viewmodel erstellt. Wie man viele zu vielen Beziehungen verbindet und andere Tabellen in linq (Lambda-Ausdruck) einfügt

Mein Diagramm enter image description here

Schließlich möchte ich Ansichtsmodell haben:

public class InsurancePolicyItemViewModel : InsurancePolicyItem 
    { 
    public InsurancePolicyItemViewModel() 
    { 
    } 

    public InsurancePolicyItemViewModel(InsurancePolicyItem item) 
    { 
     //do something - supplement the basic information 
    } 

    public int InsurancePolicyItemId { get; set; } 
    public string Name { get; set; } 
    [...] 
    public IEnumerable<Customers> { get; set; } 
    public IEnumerable<InsurancePolicyItemInstallments> { get; set; } 
    } 

Bitte helfen Sie mir Linq-Abfrage zu erstellen. Es wäre gut, Lambda-Ausdruck zu verwenden?

Nun meine Frage wie folgt aussehen:

var result = contex.InsurancePolicyItem.Where(w => w.IsActive && w.IsVisible) 
            .Include(i => i.InsuranceCompany) 
            .Include(i => i.InsuranceCompanyPolicyStatus) 
            .Include(i => i.InsuranceCompanyPolicyType) 
            .Include(i => i.User_AddedBy) 
            .Include(i => i.User_ModifiedBy) 
            .Include(i => i.InsurancePolicyItemInstallment) 
            .Include(i => i.InsurancePolicyItemFile) 
            .Include(i => i.InsurancePolicyItemCustomers) 
            .Select(s => s).ToList(); 

aber es gibt InsurancePolicyItem ohne Customers-Tabelle enthalten.

Ich habe versucht:

var query = contex.InsurancePolicyItem.Where(w => w.IsActive && w.IsVisible).Select(s => new InsurancePolicyItemViewModel(s) { 
       CustomerList = ????, 
       InstallmentList = s.InsurancePolicyItemInstallment 
       [...] 
      }); 

aber ich weiß nicht, wie die Verwendung bei und sind

+1

Siehe Eintrag: http://stackoverflow.com/questions/4115321/how-do-i-convert-multiple-inner-joins-in-sql-to-linq – jdweng

+0

in Kommentar @jdweng gepostet Link durch . möglicherweise wird dies Ihnen helfen, zu implementieren, was Sie wollen. – Rajput

+0

Erstellen Sie meine Abfragebasis für die Lösung, aber sie gibt zurück ** In LINQ to Entities werden nur parameterlose Konstruktoren und Initialisierer unterstützt ** – 18666

Antwort

0

Ihnen ein Beispiel geben, verschiedene Tabellen zu verknüpfen und neue Modelle zur Laufzeit

var persons = (
       // taking Persons table as c 
       from c in context.Persons 
       // now taking PersonStatus table as x and making join 
       // with same key columns of x and c 
       join x in context.PersonStatus on c.TcKimlik equals x.Tckn 
       join h in hospitals on x.HospitalCode equals h.KURUM_KODU 
       where x.Statu == true 
       //create new model by taking data of different tables of join 
       select new DataViewModel 
       { 
        Id = c.Id, 
        TcKimlik = c.TcKimlik, 
        Uyruk = c.Uyruk, 
        Ad = c.Ad, 
        Soyad = c.Soyad, 
        Cinsiyet = c.Cinsiyet, 
        DogumTarihi = c.DogumTarihi, 
        KurumStatu = h.PAYDAS, 
        KurumKodu = h.KURUM_KODU, 
        KurumAdi = h.KURUM_ADI, 
        BranchName = c.Brans.BranchName, 
        AcademicTitleName = c.AkademikUnvan.Title, 
        ManagerialTitleName = c.IdariUnvan.Title, 
        StaffStatuName = c.Durum.Statu, 
        BranchTypeName = c.Unvan.Type, 
        ServiceClassName = c.Unvan.ServiceClass.Name, 
        City = h.KURUM_ILI, 
        CityCode = h.IL_KODU, 
        CityTownName = h.KURUM_ILCESI 
       }).AsQueryable(); 

I erstellen denke, das hilft dir, dein Problem zu lösen

0

Meine Lösung basiert auf yo ur-Code:

var a = contex.InsurancePolicyItem.Where(w => w.IsActive && w.IsVisible && w.ItemCreatedStatusId != Helpers.InsurancePolicyItemStatus.Draft) 
                 .Select(s => new InsurancePolicyItemViewModel(s) 
                 { 
                  CustomerList = s.InsurancePolicyItemCustomers.Join(contex.Customers, 
                       q => q.CustomersId, 
                       c => c.CustomersId, 
                       (q, c) => new 
                       { 
                        customerList = c 
                       }).Select(ss => ss.customerList), 
                  InstallmentList = s.InsurancePolicyItemInstallment, 
                  FileList = s.InsurancePolicyItemFile, 
                 }); 

aber es zurückgeben Fehler

Nur parameterlos Konstrukteuren und initializers in LINQ to Entities

unterstützt werden finde ich ähnliches Problem:

Only parameterless constructors and initializers are supported in LINQ to Entities

aber es funktioniert nicht ... Wenn ich einen anonymen Typ anstelle von InsurancePolicyItemViewModel erzeuge, wird der Fehler

Ungültiger Spaltenname 'Discriminator' zurückgegeben.

Verwandte Themen