存储库模式多个选择器

时间:2016-08-03 14:00:25

标签: c# linq unit-of-work

使用UnitOfWork Repository模式我可以使用:

访问引用
var tmp = unitOfWork.Repository<User>().Queryable();

我希望查询该表并恢复 AccountId 很长的帐户:

result = a.Any(e => e.AccountId == AccountId);

这为我提供了 AccountId 帐户的记录。

我还有一个名为Emails的表,它链接到Account表。所以我现在希望将上面的查询更新为以下内容:

result = a.Any(e => 
    e.AccountId == AccountId &&
    e.Email.EmailID == EmailID
);

其中 EmailId 很长。现在应该为特定用户帐户提取特定的电子邮件。

我得到的是:

Operator '&&' cannot be applied to operands of type 'bool' and 'User'

2 个答案:

答案 0 :(得分:0)

目前尚不清楚你想要什么,但

var tmp = unitOfWork.Repository<User>().Queryable();

应该为您提供IQueryable<User>,您可以在其中应用Where条件,但您将获得User收集或对象的结果。

unitOfWork.Repository<User>().Queryable().Where(e => 
    e.AccountId == AccountId &&
    e.Email.EmailID == EmailID
);

如果你想要Email,你应该加载Email上面有User个对象,或者应用你的条件 unitOfWork.Repository<Email>().Queryable();

答案 1 :(得分:0)

我发现如果我使用以下内容,它对我有用。

Result = searchQuery.Any(e =>
                    e.AccountId == AccountId &&
                    e.Email.Any(f => f.Id == EmailId);