基本上我有酒店的房间清单, 让我们说用户选择3个房间
第一个房间有2名成人,
第2名有4名成人
第3名,有6名成年人。
很好,当我将此请求发送到XML服务时。它给了我房间的非配对列表,所以我需要配对 这些房间位于酒店房间类型的RO(仅限房间), 每对元素应具有相同的ROOM TYPE,但如上所述,每个请求的房间都有。
所以我认为你现在已经清楚了解正在发生什么:),占用属性中的第二个值显示在这里成人数量。 我不擅长数学,但我认为它是数学中的某种SETS。
结果我们共有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,仅限房间,4名成人<1,4> SB,仅限房间,6名成人<1,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
答案 0 :(得分: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
答案 1 :(得分:0)
看起来你想要删除列表,然后加倍。请参阅以下代码:
var distinctList = listOfOccupancy.Select(l => new { l.room, l.occupancy }).Distinct();
var doubledList = distinctList.Concat(distinctList);
答案 2 :(得分: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