2016-03-30 9 views
-1

Ich habe zwei separate Tabellen in meiner Lösung: Tickets und UsersInRoles. Jedes Ticket ist mit einem Techniker verbunden, der eine dritte Tabelle betrachtet: Benutzer. Eine Benutzerrolle wird jedoch nicht in der Benutzertabelle gespeichert. Es wird in der UsersInRoles-Tabelle gespeichert. Jetzt muss ich alle Tickets von Technikern filtern, die eine Rolle von New Media haben. Ich habe gesucht und das sind zwei verschiedene Ansätze, die ich habe und keiner arbeitet.Linq Filter-Modell von einer anderen Tabelle

Erster Ansatz:

var NewMediaIds = db.usersInRoles.Select(nm => nm.RoleId == new Guid(Properties.Settings.Default.NewMediaID)).ToList(); 
model = model.Where(t => NewMediaIds.Contains(t.TechnicianId)); 

und ich bekommen diese Fehlermeldung:

Error 2 Argument 1: cannot convert from 'System.Guid' to 'bool' C:\Dev\HelpDesk\HelpDesk.WebUI\Controllers\TicketController.cs 561 67 HelpDesk.WebUI

Error 1 The best overloaded method match for 'System.Collections.Generic.List.Contains(bool)' has some invalid arguments C:\Dev\HelpDesk\HelpDesk.WebUI\Controllers\TicketController.cs 561 46 HelpDesk.WebUI

Zweiten Ansatz:

model = model.Where(t => t.TechnicianId == db.usersInRoles.Where(u => u.RoleId == new Guid(Properties.Settings.Default.NewMediaID)).UserId); 

und ich bekomme diese Fehlermeldung:

Error 3 'System.Linq.IQueryable' does not contain a definition for 'UserId' and no extension method 'UserId' accepting a first argument of type 'System.Linq.IQueryable' could be found (are you missing a using directive or an assembly reference?) C:\Dev\HelpDesk\HelpDesk.WebUI\Controllers\TicketController.cs 563 153 HelpDesk.WebUI

In

Antwort

1

.FirstOrDefault();

model = model.Where(t => NewMediaIds.Contains(t.TechnicianId)).FirstOrDefault(); 
+0

Fenrir, danke für die Hilfe, aber ich bekomme immer noch den gleichen Fehler damit. – djblois

+0

Auf einen zweiten Gedanken. Ich vermute 'Modell' ist eine Liste oder IQueryable. Also funktioniert First nicht. – Fenrir88

+0

Navas Antwort scheint wie das zu sein, was ich mit meiner Antwort erreichen wollte, aber ich vermasselte es genau zu verstehen, was die Variablen enthielten. Ich denke, dass man arbeiten sollte. – Fenrir88

2

Sie versuchen, Benutzer-ID von IQueryable zu bekommen. Sie müssen die FirstOrDefault der Liste bekommen, dann UserId davon bekommen:

model = model.Where(t => t.TechnicianId == db.usersInRoles.FirstOrDefault(u => u.RoleId == new Guid(Properties.Settings.Default.NewMediaID)).UserId); 
0

Sie Navigationseigenschaften einrichten, dann Angenommen haben:

var model=db.Tickets.Where(t=>t.Technician.Roles.Any(r=>r.Name=="New Media")); 

Navigation Eigentum von Ticket über technicianId Techniker. Navigationseigenschaft vom Techniker zu Rollen über die Querverweistabelle UserRoles (technikerID, RoleId).

Verwandte Themen