下面是我试图转换为 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
之间存在一个 FK 关系,但它是一个多对多关系,CompanyRolesToUsers
是一个连接表。
我们已经构建了大部分站点,并且已经通过使用 PredateExtended 类构建 Expressions 来实现大部分过滤。
简单过滤器的代码如下:
if (!string.IsNullOrEmpty(TextBoxLastName.Text))
{
predicateAnd = predicateAnd.And(c => c.LastName.Contains(
TextBoxLastName.Text.Trim()));
}
e.Result = context.Users.Where(predicateAnd);
我正在尝试为另一个表中的子选择添加一个谓词
我想要补充的是:
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 还是个新手,而且我有一个截止日期。我还没找到一个符合的例子,但我肯定它就在某个地方。