0

HomeController.cs には、次のスニペットがあります

   public ActionResult Index()
    {
        var context = new DataClassesContext();
        var regionBoudaries = from boundaryDetails in context.RegionBoundaries
                              join boundaryID in context.Region_Boundaries on boundaryDetails.RegionBoundaryID equals boundaryID.BoundaryID
                              select new { boundaryDetails.lat, boundaryDetails.@long, boundaryID.RegionID };
        ViewData["RegionBoudaries"] = regionBoudaries;
        return View();
    }

私が書いたビューファイルで

 <%= ViewData["RegionBoudaries"] %>

クエリの結果ではなく、LINQ クエリ全体を SQL 言語に翻訳しました。クエリの結果を取得するのを手伝ってもらえますか? ありがとうございました

4

1 に答える 1

3

確かにクエリを実行する必要があります:

 ViewData["RegionBoudaries"] = regionBoudaries.ToList();

しかし、私が見ることができるのは、匿名オブジェクトを使用しているため、ビューでアクセスするのが難しくなります。したがって、モデルを定義することをお勧めします。

public class RegionViewModel
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public int RegionID { get; set; }
}

次に、クエリを調整します。

var context = new DataClassesContext();
var regionBoudaries = 
    from boundaryDetails in context.RegionBoundaries
    join boundaryID in context.Region_Boundaries on boundaryDetails.RegionBoundaryID equals boundaryID.BoundaryID
    select new RegionViewModel
    {
        Latitude = boundaryDetails.lat, 
        Longitude = boundaryDetails.@long, 
        RegionID = boundaryID.RegionID 
    };

コードを改善するための次のステップは、もちろん、このがらくたを取り除き、ViewData定義したビュー モデルとビューの強い型付けを最大限に活用することです。

public ActionResult Index()
{
    using (var context = new DataClassesContext())
    {
        var regionBoudaries = 
            from boundaryDetails in context.RegionBoundaries
            join boundaryID in context.Region_Boundaries on boundaryDetails.RegionBoundaryID equals boundaryID.BoundaryID
            select new RegionViewModel
            {
                Latitude = boundaryDetails.lat, 
                Longitude = boundaryDetails.@long, 
                RegionID = boundaryID.RegionID 
            };
        return View(regionBoudaries.ToList());
    }
}

これで、ビューはビュー モデルに強く型付けされます。

<%@ Page 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<RegionViewModel>>" 
%>

これで、強力なタイピングと Intellisense が得られます。

<% foreach (var region in Model) { %>
    <div>
        Lat: <%: region.Latitude %>, Lon: <%: region.Longitude %>
    </div>
<% } %>
于 2013-02-17T17:21:14.463 に答える