none
LINQ Abfrage zu Tabellen mit Collections / Einschränkung auf Felder innerhlab der Collections RRS feed

  • Frage

  • Hallo zusammen,

    ich habe folgendes Model

     

    Nun möchte ich ASPNET_PROFILESEXTENDED selektieren mit allen Rollen (ASPNET_USERINROLES_EXTENDED incl. der Entität ASPNET_ROLESEXTENDED) eines User sowie allen ASPNET_SAPSYSTEMESOFUSERS von EINEM bestimmten USer selektieren. Allerdings darf in den genannten Tabellen des Kennzwichen rowdeleted nicht 1 sein.

    Die Tabelle ASPNET_PROFILESEXTENDED hat eine Eigenschaft Namens ASPNET_USEREXTENDED. Über die komme ich an die Eigenschaften ASPNET_SAPSYSTEMESOFUSER sowie an ASPNET_USERINROLEXTENDED. (Beides natürlich Collcetions da zu * - Beziehungen)

     

    Wie kann ich nun bei der Selektion auf rowdeleded = 0 abfragen?

    Meine Versuche dazu:

        var query = from profiles in db.AspnetProfilesextendeds
                                    .Include("AspnetUsersExtended")
                                join userex in db.AspnetUsersExtendeds on profiles.Userid equals userex.Userid
                                join sapsysteme in db.AspnetSapsystemeofusers.Include("AspnetUsersExtended") on userex.Userid equals sapsysteme.Userid
                                join userinRoles in db.AspnetUsersinrolesExtendeds.Include("AspnetUsersExtended") on userex.Userid equals userinRoles.Userid
                                where profiles.Userid.Equals(userId)
                                where userex.Rowdeleted == false
                                where sapsysteme.Rowdeleted == false
                                where userinRoles.Rowdeleted == false
                                where profiles.Rowdeleted == false
                                select profiles;
    
    

    Leider bekomme ich hier alle UserInSapSystene egal ob dort das RowDeleted - Kennzecihen auf 0 oder 1 steht

    Hat jemand zufällig eine Idee? Versuche ich unmögliches?


    Danke und Gruß Micha

    Donnerstag, 24. November 2011 09:24

Alle Antworten

  • verknüpfe die wheres mit "und". So wie du das machst müssten auch viele Einträge doppelt sein.

    in Linq verknüpft man mit &&.

    Donnerstag, 24. November 2011 09:36
  • Ja dopperlt sind sie aber mir reicht dann an dieser Stelle ein Distinct (glaub ich...)

     

    Und ob Where oder && ist doch das gleiche dachte ich...???? also ich meine entweder oder...nicht?

     

    Danke auf jeden Fall

    Donnerstag, 24. November 2011 10:10
  • Distinct macht bei großen Datenmengen Performance Probleme. Daher eher nicht zu empfehlen.

     

    Donnerstag, 24. November 2011 10:16
  • Wie komme ich denn sonst an meine Daten? :-(
    Donnerstag, 24. November 2011 10:56
  • ging das mit den && ?
    Donnerstag, 24. November 2011 11:41
  • Nein kein Unterschied... Es werden in ASPNET_PROFILEEXTENDED.ASPNET_USEREXTENDED.ASPNET_USERINROELSEXTENDED 5 ROllen geistet obwohl 4 davon das Kennzeichen rowdeleted = 1 haben. Dürfte also nur 1 Satz dort enthalten sein...
    Donnerstag, 24. November 2011 11:51
  • Ok, also wenn ich bei solchen LINQ querys nicht mehr durchblicke, gehe ich auf den SQL Server und bastel mir eine verständliche SQL Abfrage. Diese kannst du mit dem SQL Management Studio auch zusammenklicken. Wenn diese passt, wandle ich das alles in LINQ um.

     

    Vielleicht hilft dir dieser Ansatz.

     

    Donnerstag, 24. November 2011 12:53