2017-01-15 3 views
0

This is the structure of the database on which i am working.Click on this text.Erste Datensätze aus der Datenbank mit vielen zu vielen Beziehung in asp.net Mvc

Ich möchte die EMAILID der Benutzer auswählen, die in MailStatusTable erwähnt zu einem bestimmten CategoryID gehören, wo die Spalte MailStatus Falsch enthält.

Dies ist die Abfrage, die ich bisher bekommen haben:

var category = from m in mcontext.MailStatusTable 
          where m.MailStatus == false 
          select new 
          { 
           CategoryID = m.CategoryID 
          }; 
      var email_list = from u in mcontext.UserProfiles 
          where u.AnExpert == true 
          where u.AnInstitute == true 
          where category.Contains(u.UserProfileID) 

          select new 
          { 
           LastName = u.LastName, 
           EmailU = u.Email 
          }; 

Aber meine dritte, wo Zustand, da beide über eine dritte Tabelle verbunden sind, die Tabelle und Userprofiles Kategorie Tabelle falsch ist und dass Tabelle nicht Eine Modellklasse, da beide Spalten Fremdschlüssel sind.

Dies ist die Beziehung, die ich in meiner Kontextklasse definiert habe:

modelBuilder.Entity<Categories>() 
      .HasMany(c => c.CategoriesUserProfile).WithMany(x => x.UserProfileCategories).Map(q => q.MapLeftKey("CategoryID").MapRightKey("UserProfileID").ToTable("UserProfileCategories")); 

Wie soll ich die EMAILID des Benutzers wählen, die zu einer bestimmten Kategorie gehören.

Vielen Dank im Voraus. Sicher, Das sind meine Modelle:

public class UserProfiles 
{ 
    public int UserProfileID { get; set; } 
    public string LastName { get; set; } 
    public bool AnExpert { get; set; } 
    public bool AnInstitute { get; set; } 
    public bool Client { get; set; } 
    public string Email { get; set; } 
    public virtual ICollection<Categories> UserProfileCategories{get;set;} 
} 
public class Categories 
{ 
    public int CategoryID { get; set; } 
    public String Name { get; set; } 
    public virtual ICollection<UserProfiles> CategoriesUserProfile { get; set; } 
    public virtual ICollection<MailStatusTables> CategoriesMailStatusTable { get; set; } 

} 
public class MailStatusTables 
{ 
    public int MailStatusID { get; set; } 
    public bool MailStatus { get; set; } 
    public int EnquiryID { get; set; } 
    public int CategoryID { get; set; } 
    public virtual Categories MailStatusCategory { get; set; } 

} 
+0

Können Sie Ihre Modelle posten? –

Antwort

0

Beim Schreiben von LINQ-Abfragen, die meisten der Zeit ist es am besten funktioniert mit den Entitäten starten Sie die Abfrage (oder die, die zurückkehren möchten, dass die Eigenschaft, die Sie enthalten möchten Rückkehr). Also, in diesem Fall UserProfile:

var email_list = from u in mcontext.UserProfiles 
       where u.AnExpert 
        && u.AnInstitute 
        && u.UserProfileCategories 
         .Any(c => c.MailStatusTables 
            .Any(ms => !ms.MailStatus)) 
       select new 
       { 
        LastName = u.LastName, 
        EmailU = u.Email 
       }; 

Dadurch kehren Sie alle Benutzerdaten von Benutzern, die mindestens eine Kategorie, die mindestens einen Nicht-Mail-Status haben.

Übrigens würde ich Property-Namen wie IsExpert oder HasMailStatus bevorzugen, weil diese Namen vermitteln, dass sie boolesche Werte sind.

Verwandte Themen