2

次のSQLステートメントがあります

select RegionBoundaryID, RegionBoundary.lat, RegionBoundary.long, RegionID
from RegionBoundary join Region_Boundary on RegionBoundary.RegionBoundaryID = Region_Boundary.BoundaryID
order by RegionID, RegionBoundaryID

これがLINQへの翻訳です

 var context = new DataClassesRegionDataContext();
 var regionBoudaries = from boundaryID in context.Region_Boundaries
                       join boundariesDetail in context.RegionBoundaries on boundaryID.BoundaryID equals boundariesDetail.RegionBoundaryID
                       select new RegionViewModel { ID = boundariesDetail.RegionBoundaryID, Latitude = boundariesDetail.lat.Value, Longitude = boundariesDetail.@long.Value, RegionID = boundaryID.RegionID };
 regionBoudaries.OrderBy(region => region.RegionID).ThenBy(region => region.ID);

しかし、LINQ から得た結果は、SQL ステートメントの結果とは異なります。LINQ ステートメントのどこが間違っていましたか? ありがとうございました。

編集:違いは、結果が表示される順序にあります

4

2 に答える 2

2

これにより、同じクエリが生成されます。

var context = new DataClassesRegionDataContext();
var regionBoudaries = from rb in context.Region_Boundaries
                      join b in context.RegionBoundaries 
                           on rb.BoundaryID equals b.RegionBoundaryID
                      orderby rb.RegionID, b.RegionBoundaryID // ordering here
                      select new RegionViewModel { 
                           ID = b.RegionBoundaryID, 
                           Latitude = b.lat.Value, // what if null?
                           Longitude = b.@long.Value, // what if null?
                           RegionID = rb.RegionID 
                      };

ところで、テーブル名と変数名はひどいものです。アンダースコアのみが異なる2つのテーブル!また、変数boundaryIDの名前は、整数(または他のIDタイプ)のように見えます。

于 2013-02-28T17:52:29.403 に答える
2

1 つの問題は、順序付けられた列挙型OrderByThenBy 返し、基になる列挙型を変更しないため、次を使用する必要があることです。

var regionBoudaries = from boundaryID in context.Region_Boundaries
                       join boundariesDetail in context.RegionBoundaries on boundaryID.BoundaryID equals boundariesDetail.RegionBoundaryID
                       select new RegionViewModel { ID = boundariesDetail.RegionBoundaryID, Latitude = boundariesDetail.lat.Value, Longitude = boundariesDetail.@long.Value, RegionID = boundaryID.RegionID };
regionBoudaries = regionBoudaries.OrderBy(region => region.RegionID).ThenBy(region => region.ID);
于 2013-02-28T17:52:45.740 に答える