Моя структура базы данных такова: OptiUser
принадлежит нескольким UserGroup
s через таблицу IdentityMap
, которая является таблицей соответствия (многие ко многим) с некоторыми дополнительными свойствами, прикрепленными к ней.Каждый UserGroup
имеет несколько OptiDashboard
с.
У меня есть строка GUID, которая идентифицирует конкретного пользователя (wlid
в этом коде).Я хочу получить IEnumerable
всех OptiDashboards
для пользователя, обозначенного wlid
.
Какой из этих двух запросов Linq-to-Entities является наиболее эффективным?Они одинаково работают на бэкэнде?
Кроме того, могу ли я сократить Include
операторы варианта 2 до .Include("IdentityMaps.UserGroup.OptiDashboards")
?
using (OptiEntities db = new OptiEntities())
{
// option 1
IEnumerable<OptiDashboard> dashboards = db.OptiDashboards
.Where(d => d.UserGroups
.Any(u => u.IdentityMaps
.Any(i => i.OptiUser.WinLiveIDToken == wlid)));
// option 2
OptiUser user = db.OptiUsers
.Include("IdentityMaps")
.Include("IdentityMaps.UserGroup")
.Include("IdentityMaps.UserGroup.OptiDashboards")
.Where(r => r.WinLiveIDToken == wlid).FirstOrDefault();
// then I would get the dashboards through user.IdentityMaps.UserGroup.OptiDashboards
// (through foreach loops...)
}