Как насчет:
IEnumerable<AccessRights> accessRights =
// This bit works in the database
(from t1 in this.db.AccessRights
join t2 in this.db.AccessRightsExtra
on t1.IdAccessRights equals t2.IdAccessRights
where t2.IdUser== userId
select new
{
IdAccessRights = t1.IdAccessRights,
Description= t2.Description
})
.AsEnumerable() // From here on it's in-process
.Select(x => new AccessRights
{
IdAccessRights = x.IdAccessRights,
Description= x.Description
});
Обратите внимание, что результатом будет IEnumerable<T>
, а не IQueryable<T>
, но оно все равно будет лениво оцениваться. Это вызовет проблему?
Либо просто используйте анонимный тип, используя неявно типизированную локальную переменную:
var accessRights = from t1 in this.db.AccessRights
join t2 in this.db.AccessRightsExtra
on t1.IdAccessRights equals t2.IdAccessRights
where t2.IdUser== userId
select new
{
IdAccessRights = t1.IdAccessRights,
Description= t2.Description
};
Это по-прежнему будет IQueryable<T>
, но T
- это анонимный тип. Вы не сможете использовать это как IQueryable<AccessRights>
, но если все, что вам нужно, это свойства IdAccessRights
и Description
, и они нужны вам только одним и тем же способом, это может быть достаточно для вас ...