0

リストの問題

Linq から SQL クエリに取得した船の長いリストがありますが、ImoNo ごとに 1 行だけが必要です。今日、私はImoNoごとに約4行あります. 最後に更新された 1 つの行だけが必要です (したがって、この例では 2013-01-27 が必要です)。

これは私のLinq To SQLクエリです:

var res = from positions in context.Lloyds_ETAs
          join vessels in context.Lloyds_Vessels on positions.ImoNumber equals vessels.imo_no
           select new PositionData {
              ImoNo = positions.ImoNumber,
              PositionCordinates = positions.AIS_Latest_Position,
              CompassOverGround = positions.Compass_over_Ground_Heading,
              VesselId = positions.Vessel_ID,
              Equipment = vessels.vessel_type,
              Updated = positions.Last_Place_Location
           };

return res.ToList();
4

4 に答える 4

2
var res = (from positions in context.Lloyds_ETAs
          join vessels in context.Lloyds_Vessels on positions.ImoNumber equals vessels.imo_no
          select new PositionData {
              ImoNo = positions.ImoNumber,
              PositionCordinates = positions.AIS_Latest_Position,
              CompassOverGround = positions.Compass_over_Ground_Heading,
              VesselId = positions.Vessel_ID,
              Equipment = vessels.vessel_type,
              Updated = positions.Last_Place_Location
           })
           .GroupBy(x => x.ImoNo)
           .Select(g => g.OrderByDescending(pd => pd.Updated).First());
于 2013-02-14T18:54:16.943 に答える
0

最後のものが必要な場合は.OrderBy(pd => pd.Updated).Last()、選択後に追加するだけです。

var res = (from positions in context.Lloyds_ETAs
          join vessels in context.Lloyds_Vessels on positions.ImoNumber equals vessels.imo_no
           select new PositionData {
              ImoNo = positions.ImoNumber,
              PositionCordinates = positions.AIS_Latest_Position,
              CompassOverGround = positions.Compass_over_Ground_Heading,
              VesselId = positions.Vessel_ID,
              Equipment = vessels.vessel_type,
              Updated = positions.Last_Place_Location
           }).OrderBy(pd => pd.Updated).Last();

return res.ToList();
于 2013-02-14T18:48:20.453 に答える
0
(yourQuery).OrderByDescending(pd=>pd.Updated).First()
于 2013-02-14T18:50:16.287 に答える
0

結果として「行」を 1 つだけ取得するには、いくつかの方法があります。

res.OrderByDescending(x => x.Updated).Take(1);
res.OrderByDescending(x => x.Updated).First();
res.Order(x => x.Updated).Last();

ただし、いくつかの重複があるようですので、グループ化を行う方が適切かもしれません。

于 2013-02-14T18:50:21.043 に答える