enter image description here我有一个Hotel
详细信息的keyValupair;:
//这是数据来自的地方:-
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
dynamic hotels1 = (dynamic)json_serializer.DeserializeObject(jso);
var keyValuePairs = hotels1["hotels"];
var hotelList = keyValuePairs["hotels"]; // hotelList[0] ={'key'='Code' ;value='123'}
//{'key'='Name'
// ;value='Sheraton'}
如何将其转换为Hotel
的列表
List<Hotel> hotaals = new List<Hotel>();
Hotel
在哪里
public class Hotel
{
public int code { get; set; }
public string name { get; set; }
}
我使用for循环来映射字段,但是我的老板说它效率低下,因此我必须使用Linq。
我使用的循环
foreach (dynamic h in hotelList)
{
oneHotel = new Hotel();
oneHotel.code = h["code"];
oneHotel.name = h["name"];
myHotels.Add(oneHotel);
}
答案 0 :(得分:1)
因此,首先您需要获取初始数据:
var hotelList = keyValuePairs["hotels"];
然后使用linq创建新列表:
var hotelObjects = hotelList.Select(hotel => new Hotel { code = hotel.key, name = hotel.name});
现在要弄清楚linq在后台执行的操作是遍历对象的迭代循环(就像foreach一样),并为hotelList中的每个项目创建一个新的Hotel对象,并将其返回为IQueryable<Hotel>
。如果您不希望使用.ToArray()
.ToList()
或IQueryable<>
现在,您的初始酒店详细信息清单似乎还没有结构化,因此您可能必须修改上面提供的linq查询以适合清单的结构。
您可能需要更接近此的东西
// Gives IQueryable<Hotel> as result
var hotelObjects = hotelList.Select(hotel => new Hotel{code = hotel["key"], name = hotel["name"]});
// Gives Array<Hotel> as result
var hotelObjects = hotelList.Select(hotel => new Hotel{code = hotel["key"], name = hotel["name"]}).ToArray();
// Gives List<Hotel> as result
var hotelObjects = hotelList.Select(hotel => new Hotel{code = hotel["key"], name = hotel["name"]}).ToList();
答案 1 :(得分:1)
蛮力的方法是通过对属性进行硬编码来将字典投影到对象上。
List<Hotel> hotaals = hotelList.Select(kvp => new Hotel {
code = kvp['Code'],
name = kvp["Name"]
})
.ToList();
我也将挑战您的“大老板”的低效率含义。