Вот пример запроса, который я пытаюсь преобразовать в LINQ:
SELECT *
FROM Users
WHERE Users.lastname LIKE '%fra%'
    AND Users.Id IN (
         SELECT UserId 
         FROM CompanyRolesToUsers 
         WHERE CompanyRoleId in (2,3,4) )
Существует отношение FK между CompanyRolesToUsers и Users, но это отношение много-много, а CompanyRolesToUsers - таблица соединений.
У нас уже есть большая часть нашего сайта, и мы уже имеем большую часть фильтрации, работая, создавая выражения, используя класс PredicateExtensions.
Код для простых фильтров выглядит примерно так:
 if (!string.IsNullOrEmpty(TextBoxLastName.Text))
 {
     predicateAnd = predicateAnd.And(c => c.LastName.Contains(
                                     TextBoxLastName.Text.Trim()));
 }
e.Result = context.Users.Where(predicateAnd);
Я пытаюсь добавить предикат для подзапроса в другой таблице. (CompanyRolesToUsers)
То, что я хотел бы добавить, - это то, что делает это:
int[] selectedRoles = GetSelectedRoles();
if( selectedRoles.Length > 0 )
{
    //somehow only select the userid from here ???:
    var subquery = from u in CompanyRolesToUsers
                   where u.RoleID in selectedRoles
                   select u.UserId;
    //somehow transform this into an Expression ???:
    var subExpression = Expression.Invoke(subquery);
    //and add it on to the existing expressions ???:
    predicateAnd = predicateAnd.And(subExpression);
}
Есть ли способ сделать это? Это расстраивает, потому что я могу легко записать хранимую процедуру, но я новичок в этой функции LINQ, и у меня есть крайний срок. Я не смог найти пример, который соответствует, но я уверен, что он где-то там.
