这是我试图转换为LINQ的查询示例:
SELECT *
FROM Users
WHERE Users.lastname LIKE %fra%
AND Users.Id IN (
SELECT UserId
FROM CompanyRolesToUsers
WHERE CompanyRoleId in (2,3,4) )
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,而且我有一个截止日期。我找不到匹配的示例,但我肯定它在某个地方。