无法在没有错误的情况下在动态查询中使用 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 带来什么好处,除了混乱。
我正在尝试在其父动态列表内的动态列表上使用 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 带来什么好处,除了混乱。