0

私はネットを精査しましたが、2 つの SharpRepository リポジトリ間で結合を実行する例を見つけることができませんでした。誰でもページまたは例へのリンクを提供できますか? 次のlinq式をシャープなレポ式に変換しようとしています:

        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;
4

1 に答える 1

1

リポジトリには、LINQ Join ステートメントに似た Join メソッドがあり、1 つの IRepository<> を別の IRepository<> に結合できます。結合する IRepository<>、内部キー セレクター、外部キー セレクター、および結果セレクターを渡します。

それを使用する統合テストについては、こちらを参照してください: https://github.com/SharpRepository/SharpRepository/blob/master/SharpRepository.Tests.Integration/RepositoryJoinTests.cs

この呼び出しの結果は、通常の IRepository<> 自体と同じように、GetAll や FindAll などを呼び出すことができる別のリポジトリです。だから私はあなたがこのようなことをしたいと思うでしょう:

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);

それが、結合構文で行う方法だと思います。

EF のようなナビゲーション プロパティがある場合は、おそらく次の構文の方が簡単です。

return accountUserRepo.FindAll(x => x.AccountId == accountId && x.User.UserName.Contains(email), x => x.User);
于 2013-09-10T21:58:21.663 に答える