我正在尝试在其父动态列表中的动态列表中使用LINQ。变量c.characterBase.peerView.equipment
的类型为JArray
。我的目标是使EquipmentList
属性成为字符串列表,但它目前是一个对象列表,每个对象都有一个字符串属性。
dynamic dynamicData = JsonConvert.DeserializeObject(result);
IEnumerable<dynamic> list = dynamicData.Response.data.characters;
var characters = list.Select(c => new CharacterModel
{
///other properties
EquipmentList = c.characterBase.peerView.equipment
.ToObject<List<Equipment>>().Select(p => new
{
})
});
编译错误:如果没有首先将lambda表达式转换为委托或表达式树类型,则不能将lambda表达式用作动态调度操作的参数。
dynamic dynamicData = JsonConvert.DeserializeObject(result);
IEnumerable<dynamic> list = dynamicData.Response.data.characters;
Func<dynamic, string> function = equipment => equipment.itemHash;
var characters = list.Select(c => new CharacterModel
{
///other properties
EquipmentList = c.characterBase.peerView.equipment
.ToObject<List<Equipment>>().Select(function)//.Select("itemHash") fails using System.Linq.Dynamic as well
});
运行时异常:&#39; System.Collections.Generic.List&#39;不包含&#39;选择&#39;
的定义答案 0 :(得分:0)
如果您不能使用它,请不要使用它。你可以这样做:
JObject data = JObject.Parse(result);
JArray list = (JArray)data.SelectToken("Response.data.characters");
var characters = list.Select(c => new CharacterModel
{
//other properties
Other = c.Value<int>("otherProperty"),
EquipmentList = ((JArray)c.SelectToken("characterBase.peerView.equipment"))
.Select(p => p.Value<string>("itemHash")).ToList()
});
在这种情况下,除了混乱之外,我个人看不到使用动力学带来什么好处。