0

情報ウィンドウを使用して、Googleマップにさまざまなマーカーをマップしようとしています。コントローラーを介して文字列を渡そうとするまで、すべて正常に機能しています。

以下のエラーが表示されます。

「LINQ to Entities はメソッド 'System.String GetMainPhoto(Int32)' メソッドを認識しないため、このメソッドはストア式に変換できません。」

これは主に ToString メソッドまたはその他のメソッドの使用が有効でないために発生することを読みました。しかし、この場合、このエラーを修正する方法がよくわかりません。

基本的に、写真のファイル名を保持する db - PropertyPhoto があります。GetMainPhoto は基本的にすべての行を検索し、メインの写真ファイル名を返します。

public string GetMainPhoto(int id)
        {
            return db.PropertyPhotos.Single(p => p.PropertyId == id && p.MainPic == true).PhotoLocation;

        }

コントローラは次のとおりです。

public ActionResult Map()
        {
            if (Request.IsAjaxRequest())
            {
                var properties = websiteRepository.FindAllProperties();

                var jsonProperties = from property in properties
                                     select new JsonProperty
                                     {
                                         PropertyId = property.PropertyId,
                                         NoOfBedroom = property.NoOfBedrooms,
                                         Price = property.Price,
                                         Address1 = property.PropertyAddress.Address1,
                                         MainPicSrc = websiteRepository.GetMainPhoto(property.PropertyId),
                                         Latitude = property.PropertyAddress.Latitude,
                                         Longitude = property.PropertyAddress.Longitude
                                     };

                return Json(jsonProperties.ToList(), JsonRequestBehavior.AllowGet);
            }
            else 
            {
                return View();
            }
        }
4

1 に答える 1

2

.ToList()匿名型に投影する前に呼び出して、最初にデータを熱心にロードするようにしてください。そうしないと、EF はwebsiteRepository.GetMainPhoto呼び出しを SQLに変換する方法を知りません。

var properties = websiteRepository.FindAllProperties().ToList();

ただし、注意してください。これを行うと、SELECT N+1 の問題が発生する可能性があります。これは、最初の結果セットの各要素に対して、SQL クエリを送信してMainPicSrcプロパティを取得するためです。

より良いアプローチは、データベースによって直接これを実行し、呼び出しjoinを使用しないことです。websiteRepository.GetMainPhoto

于 2012-10-08T16:26:40.000 に答える