2016-03-30 21 views
-1

Çözümümde iki ayrı tablom var: Biletler ve UsersInRoles. Her bir biletin üçüncü bir masaya bakan bir teknisyeni vardır: Kullanıcılar. Ancak, Kullanıcı Tablosunda bir kullanıcı rolü kaydedilmez; UsersInRoles tablosuna kaydedilir. Şimdi tüm biletleri New Media rolüne sahip teknisyenler tarafından filtrelemem gerekiyor. Arama yaptım ve bu benim sahip olduğum ve ne çalışmadığı iki farklı yaklaşım.Başka bir tablodan Linq filtre modeli Tablo

İlk Yaklaşım:

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

İkinci Yaklaşım:

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

ve bu hatayı alıyorum

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

ve bu hatayı alıyorum:

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

cevap

1

Sen IQueryable den UserId almak için çalışıyoruz .FirstOrDefault();

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

Fenrir, yardım için teşekkür ederim ama hala aynı hatayı alıyorum. – djblois

+0

İkinci bir düşüncede. Ben 'model' bir liste veya IQueryable olduğunu tahmin ediyorum. Yani İlk kullanarak işe yaramaz. – Fenrir88

+0

Nava'nın cevabı, cevabımla almayı istediğim gibi görünüyor, ancak içerdiği değişkenlerin tam olarak ne olduğunu anlamaya çalıştım. Bence çalışmalı. – Fenrir88

2

ekleyin. Daha sonra bunun UserId almak, listenin FirstOrDefault almak gerekir:

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

gezinme özellikleri daha sonra kurdunuz varsayarsak: Bilet dışında

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

Navigasyon özelliği technicianId aracılığıyla Teknisyen için. Teknik Özellikler Kullanıcı Kılavuzu (teknisyeni kimliği, RoleId) çapraz referans tablosu aracılığıyla Teknisyen'den Rollere gezinme özelliği.

İlgili konular