无法在没有错误的情况下在动态查询中使用 LINQ

Can't use LINQ in Dynamic Query without errors

我正在尝试在其父动态列表内的动态列表上使用 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 表达式用作动态分派操作的参数,而无需先将其转换为委托或表达式树类型。

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
 });

运行时异常:'System.Collections.Generic.List' 不包含 'Select'

的定义

如果你不能使用它就不要使用它。您可以这样做:

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()
});

我个人看不出在这种情况下使用动力学会给 table 带来什么好处,除了混乱。