EF7を使用するとLinq Join

c# entity-framework entity-framework-core linq

質問

私は次のlinqステートメントを持っています:

( from apiKey in context.Set<ApiKey>()
                    join application in context.Set<Application>() on apiKey.User equals application.User
                    join paymentGateway in context.Set<PaymentGateway>() on apiKey.User equals paymentGateway.User
                    where apiKey.Key == secureRequest.ApiKey
                    where application.Secret == secureRequest.ApplicationSecret
                    where paymentGateway.Id == secureRequest.PaymentGatewayId
                    select apiKey ).AnyAsync();

しかし、私が知る限り正しいですが、コードを実行すると次のエラーが発生します。

Expression of type 'System.Collections.Generic.IEnumerable`1[System.Data.Common.DbDataReader]' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope`1[DomainModel.PaymentGateway]]' of method 'System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope] _Join[QuerySourceScope,QuerySourceScope`1,User,QuerySourceScope](System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope], System.Collections.Generic.IEnumerable`1[Microsoft.Data.Entity.Query.QuerySourceScope`1[DomainModel.PaymentGateway]], System.Func`2[Microsoft.Data.Entity.Query.QuerySourceScope,PaymentGatewayWrapper.DomainModel.User], System.Func`2[Microsoft.Data.Entity.Query.QuerySourceScope`1[PaymentGatewayWrapper.DomainModel.PaymentGateway],PaymentGatewayWrapper.DomainModel.User], System.Func`3[Microsoft.Data.Entity.Query.QuerySourceScope,Microsoft.Data.Entity.Query.QuerySourceScope`1[DomainModel.PaymentGateway],Microsoft.Data.Entity.Query.QuerySourceScope])'

正しい方向のポインタはすばらしいです。

いくつかの調査の後、私はそれがこのエラーの原因となっているAnyであることを発見しました。だから次のように:

( from apiKey in context.Set<ApiKey>()
                        join application in context.Set<Application>() on apiKey.User equals application.User
                        join paymentGateway in context.Set<PaymentGateway>() on apiKey.User equals paymentGateway.User
                        where apiKey.Key == secureRequest.ApiKey
                        where application.Secret == secureRequest.ApplicationSecret
                        where paymentGateway.Id == secureRequest.PaymentGatewayId
                        select apiKey ).ToListAsync();

私はこのエラーが発生します:

The multi-part identifier "application.Secret" could not be bound.
The multi-part identifier "paymentGateway.Id" could not be bound.

誰もがこの問題が何であるか知っていても、EF 7サポートがまだ適切に参加しているとは思わない

人気のある回答

私が知っているように、Joinはプリミティブ型でなければなりません。あなたの参加では、あなたがオブジェクトUserために参加するように見えUserが、代わりにUserIdために参加する必要があります。

( from apiKey in context.Set<ApiKey>()
                    join application in context.Set<Application>() on apiKey.UserId equals application.UserId
                    join paymentGateway in context.Set<PaymentGateway>() on apiKey.UserId equals paymentGateway.UserId
                    where apiKey.Key == secureRequest.ApiKey
                    where application.Secret == secureRequest.ApplicationSecret
                    where paymentGateway.Id == secureRequest.PaymentGatewayId
                    select apiKey ).AnyAsync();


Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ