0

私は次のlinqクエリを持っています

public IEnumerable<DealershipWithDealersViewModel> Get(float latitude, float longitude)
        {
            return from dealer in Db.Dealerships
                          join i in Db.NearestDealers(latitude, longitude)
                          on dealer.DealerID equals i.DealerID
                          select new DealershipWithDealersViewModel
                                     {
                                         DealerID = dealer.DealerID,
                                         Dealer = dealer.Dealer,
                                         DoSales = dealer.DoSales,
                                         DoService = dealer.DoService,
                                         AddressProvinceID = dealer.AddressProvinceID,
                                         AddressLocationID = dealer.AddressLocationID,
                                         Address1 = dealer.Address1,
                                         Address2 = dealer.Address2,
                                         Tel = dealer.Tel,
                                         Fax = dealer.Fax,
                                         MapLat = dealer.MapLat,
                                         MapLong = dealer.MapLong,
                                         Location = dealer.Location.LocationName,
                                         DealerUsers = dealer.DealerUsers
                                            .Select(y => new DealerUserViewModel
                                                             {
                                                                DealerUserID = y.DealerUserID,
                                                                FirstName  = y.Firstname,
                                                                Surname = y.Surname,
                                                                LandLine = y.LandLine,
                                                                Email = y.Email,
                                                                Position = y.DealerType.DealerPosition
                                                             })

                                     };
        }

ここに画像の説明を入力してください 次のエラーが発生し続けますネストされたクエリに適切なキーがありません。ネット上で何も見つかりません。DealerUsersなしで上記をロードすると、期待どおりに機能しますが、ネストされたデータが必要です。ありがとうございました!ちなみに以下は動作します。

public IEnumerable<DealershipWithDealersViewModel> Get(float latitude, float longitude)
        {
            return from dealer in Db.Dealerships
                          join i in Db.NearestDealers(latitude, longitude)
                          on dealer.DealerID equals i.DealerID
                          select new DealershipWithDealersViewModel
                                     {
                                         DealerID = dealer.DealerID,
                                         Dealer = dealer.Dealer,
                                         DoSales = dealer.DoSales,
                                         DoService = dealer.DoService,
                                         AddressProvinceID = dealer.AddressProvinceID,
                                         AddressLocationID = dealer.AddressLocationID,
                                         Address1 = dealer.Address1,
                                         Address2 = dealer.Address2,
                                         Tel = dealer.Tel,
                                         Fax = dealer.Fax,
                                         MapLat = dealer.MapLat,
                                         MapLong = dealer.MapLong,
                                         Location = dealer.Location.LocationName

                                     };
        }

ここに画像の説明を入力してください

アップデート

これも機能します。

return Db.Dealerships.Select(x => new DealershipWithDealersViewModel
            {
                DealerID = x.DealerID,
                Dealer = x.Dealer,
                DoSales = x.DoSales,
                DoService = x.DoService,
                AddressProvinceID = x.AddressProvinceID,
                AddressLocationID = x.AddressLocationID,
                Address1 = x.Address1,
                Address2 = x.Address2,
                Tel = x.Tel,
                Fax = x.Fax,
                MapLat = x.MapLat,
                MapLong = x.MapLong,
                Location = x.Location.Location1,
                DealerUsers = x.DealerUsers.Select(y => new DealerUserViewModel
                                                            {
                                                                DealerUserID = y.DealerUserID,
                                                                FirstName = y.Firstname,
                                                                Surname = y.Surname,
                                                                LandLine = y.LandLine,
                                                                Email = y.Email,
                                                                Position = y.DealerType.DealerType1
                                                            })
            });

ここに画像の説明を入力してください

4

2 に答える 2

1

あなたがしていることは不可能かもしれません。参照:MSDN。記事の下部にそれは述べています

ネストされたクエリからキーをプルアップする必要がある特定のタイプのクエリはサポートされていません。

于 2013-02-17T19:03:51.070 に答える
0

それは構成可能性の問題です。EFは常にクエリをSQLに変換しようとします。これが成功した場合は、問題ありません。そうでない場合は、たとえば、内部のオブジェクトにlinqを切り替えることによって(linq to sqlが行うように)、機能させようとはしません。ストアドプロシージャの結果をSQLクエリに結合しようとしています。EFは言うまでもなく、sprocの結果は構成できないため、これはプレーンSQLでは実行できません。

Db.Dealerships.AsEnumerable()とを使用して、結果をメモリに結合するだけDb.NearestDealers(latitude, longitude)です。

DealerIDしたがって、プロシージャのシグネチャにフィルタパラメータを追加できれば非常に便利です。

于 2013-02-18T00:34:54.557 に答える