0

基本上我有来自酒店的房间列表,假设用户选择了 3 个房间

第 1 间可容纳 2 名成人,第 2 间可容纳
4 名成人,第
3 间可容纳 6 名成人。

很好,当我将此请求发送到 XML 服务时。它为我提供了带有未配对列表的房间,因此我需要根据 RO(仅限房间)的酒店房间类型对这些房间进行配对,每对元素应具有相同的房间类型,但每个请求的房间都如上所述。

所以我想你现在已经清楚地知道发生了什么:),Occupancy 属性中的第二个值显示在这里 Number of Adults。我数学不好,但我认为它是数学中的某种集合。

结果,我们总共有 4 间客房,其中我们有前 2 间供 2 位成人(//1 和 //2)使用的房间,因此我们必须将这些房间与其他(4 位成人和 6 位成人)房间配对。

现在在这种情况下,我需要 3 对,如下所述

SB,仅限客房, 2 名成人1.2 SB,仅限客房, 4 名成人
1.4 SB,仅限客房, 6 名成人 1.6 DQ,仅限客房, 2 名成人1.2 SB,仅限客房,1 , 4 位成人 SB,仅限客房,1,6 位 成人 6 位成人





SB, 早餐, 1,2 2 成人
SB, 早餐, 1,4 4 成人
SB, 早餐, 1,6 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

我有一个解决方案,看起来有点复杂,但是可以满足您的要求:

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,occupancyindex。正确排序后,您的数据顺序正确。

结果是一个具有以下顺序的列表:

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 回答
0

看起来您想对列表进行重复数据删除,然后将其加倍。请看下面的代码:

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