SharpRepository - 在两个存储库之间加入

时间:2013-09-10 19:37:36

标签: c# linq sharp-repository

我已经在网上搜索过,无法找到在两个SharpRepository存储库之间进行连接的任何示例。任何人都可以提供页面或示例的链接吗?我试图将以下linq表达式转换为一个尖锐的repo表达式:

        var user = (from f in _context.AccountUsers
                    join h in _context.Users on f.UserId equals h.UserId
                    where f.AccountId == accountId && h.UserName.Contains(email)
                    select new
                    {
                        h
                    });
        return (IEnumerable<User>)user;

-----更新------

这就是我想出来的,但它似乎没有正常工作......

            var aur = new AccountUserRepository();
        var user = this.Join(aur, u => u.UserName.Contains(email), au => au.AccountId == accountId, 
            (u, au)=> u).AsQueryable().AsEnumerable();
        return user;

1 个答案:

答案 0 :(得分:1)

存储库上有一个类似于LINQ Join语句的Join方法,可以让你加入一个IRepository&lt;&gt;与另一个IRepository&lt;&gt;。你传递了一个IRepository&lt;&gt;加入,内键选择器,外键选择器和结果选择器。

您可以在此处查看使用它的集成测试:https://github.com/SharpRepository/SharpRepository/blob/master/SharpRepository.Tests.Integration/RepositoryJoinTests.cs

此调用的结果是另一个存储库,您可以调用GetAll或FindAll等,就像它是普通的IRepository&lt;&gt;一样。本身。所以我想你会想做这样的事情:

var accountUserRepo = new AccountUserRepository();
var userRepo = new UserRepository();

// join on the UserId column that is common to both, and select an anonymous type with both pieces of info (you would select just what you need)
var compositeRepo = accountUserRepo.Join(userRepo, au => au.UserId, u => u.UserId, (au, u) => new { AccountUserInfo = au, UserInfo = u } );

return compositeRepo.FindAll(x => UserInfo.UserName.Contains(email) && x.AccountInfo.AccountId == accountId, x => x.UserInfo);

我认为你会用Join语法来做这件事。

如果你有像在EF中那样的导航属性,你可能只需要做一个更简单的语法:

return accountUserRepo.FindAll(x => x.AccountId == accountId && x.User.UserName.Contains(email), x => x.User);