基本上我有酒店的房间列表,比方说用户选择3个房间
第一间有两名成人的房间,
第二名:4名成人
第三名,6名成人。
好吧,当我将这个请求发送到XML服务时。它给我的房间与未对名单,所以我需要对这些房间的基础是酒店房间类型,是RO (房间),每一对元素应该有相同的房间类型,但每一个要求的房间,如上文所述。
因此,我想您现在已经清晰地看到了正在发生的事情:),占用率属性中的第二个值显示了成人的数量。我的数学不好,但我认为这是数学中的一套。
因此,我们总共有4个房间,其中我们有两个成年人的前2个房间(//1和//2),因此我们必须将这些房间与其他房间(4名成人和6名成年人)配对。
在这个场景中,我需要3对,如下所述
SB,仅限房间,1,2 ,供2名成人使用 SB,仅限房间,1,4 ,供4名成人使用 SB,仅限房间,1,6 适用于6名成人 DQ,仅限房间,1,2 为2成人 SB,仅限房间,1,4 ,供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发布于 2013-03-14 13:20:39
也许这会为你指明正确的方向:
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-14 13:33:48
看上去你想把名单弄清楚,然后再加倍。见下面的代码:
var distinctList = listOfOccupancy.Select(l => new { l.room, l.occupancy }).Distinct();
var doubledList = distinctList.Concat(distinctList);发布于 2013-03-14 13:37:13
我有一个解决方案,看起来有点复杂,但做你想做的事情:
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,2https://stackoverflow.com/questions/15410302
复制相似问题