0

基本的に私はホテルからの部屋のリストを持っています.ユーザーが3つの部屋を選択するとしましょう.

1 室目は大人 2 名、
2 室目は大人 4 名、
3 室目は大人 6 名。

このリクエストを XML サービスに送信すると、問題ありません。それは私にアンペアリストの部屋を与えるので、RO(部屋のみ)であるホテルの部屋タイプに基づいてこれらの部屋をペアにする必要があります。

これで、何が起こっているのかが明確になったと思います:)、Occupancy プロパティの 2 番目の値は、ここに Number of Adults を示しています。私は数学が苦手ですが、数学のSETSのようなものだと思います。

その結果、合計 4 つの部屋ができ、最初に大人 2 人用の 2 つの部屋 (//1 と //2) があるため、これらの部屋を他の (大人 4 人と大人 6 人) の部屋とペアにする必要があります。

このシナリオでは、以下で説明するように 3 つのペアが必要です

SB, Room Only, 1,2 大人2名用
SB, Room Only, 1,4 大人4名用
SB, Room Only, 1,6 大人6名用

DQ, Room Only, 1,2 大人2名用
SB, Room Only, 1 , 4 大人4名用
SB, 素泊まり, 1,6 大人6名用

SB、朝食、大人 2名の場合 1,2 SB、朝食、大人 4 名
の場合 1,4 SB、朝食、大人 6名 の場合 1,6

public class rr {
   public string roomType { get; set; }
   public string room { get; set; }
   public string occupancy { get; set; }        
}

List<rr> listOfOccupancy = new List<rr>();

listOfOccupancy.Add(new rr { roomType = "SB", room = "Room Only", occupancy = "1,2" }); //1
listOfOccupancy.Add(new rr { roomType = "DQ", room = "Room Only", occupancy = "1,2" }); //2
listOfOccupancy.Add(new rr { roomType = "SB", room = "Room Only", occupancy = "1,4" }); //3
listOfOccupancy.Add(new rr { roomType = "SB", room = "Room Only", occupancy = "1,6" }); //4 

listOfOccupancy.Add(new rr { roomType = "SB", room = "Breakfast", occupancy = "1,2" }); //5
listOfOccupancy.Add(new rr { roomType = "SB", room = "Breakfast", occupancy = "1,4" }); //6
listOfOccupancy.Add(new rr { roomType = "SB", room = "Breakfast", occupancy = "1,6" }); //7
4

3 に答える 3

1

たぶん、これはあなたを正しい方向に向けるかもしれません:

    var x = listOfOccupancy
        .OrderByDescending(r => r.room)
        .ThenBy(r => r.occupancy)
        // Optional distinct using equality comparer
        //.Distinct(...)
        .ToList();

乾杯、アレックス

編集:これは生成します:

RO, 1,2
RO, 1,2
RO, 1,4
RO, 1,6
AB, 1,2
AB, 1,2
AB, 1,4
AB, 1,6
于 2013-03-14T13:20:39.250 に答える
0

リストの重複を排除してから、2 倍にしたいようです。以下のコードを参照してください。

var distinctList = listOfOccupancy.Select(l => new { l.room, l.occupancy }).Distinct();
var doubledList = distinctList.Concat(distinctList);
于 2013-03-14T13:33:48.523 に答える
0

私は少し複雑に見える解決策を持っていますが、あなたが望むことをします:

var results = listOfOccupancy.GroupBy(rr => rr.room)
                             .Select(g => g.GroupBy(rr => rr.occupancy).SelectMany(g2 => g2.Select((rr, i) => new { rr, i })))
                             .SelectMany(g => g.Select(g2 => g2))
                             .OrderBy(e => e.rr.room)
                             .ThenBy(e => e.i)
                             .ThenBy(e => e.rr.occupancy)
                             .Select(e => e.rr)
                             .ToList();

それは何をしますか?まず、入力リストをroomプロパティ値でグループ化します。グループごとに再度グループ化し、occupancyすべてのサブグループ内の要素にインデックスを割り当てます。その後、すべてのグループが を使用してフラット化されSelectManyます。その時点でroom、 、occupancyおよびを含む無名オブジェクトのリストがありindexます。適切に並べ替えると、データが正しい順序になります。

結果は次の順序のリストです。

AB 1,2
AB 1,4
AB 1,6
AB 1,2
RO 1,2
RO 1,4
RO 1,6
RO 1,2
于 2013-03-14T13:37:13.843 に答える