【发布时间】:2015-12-21 09:21:23
【问题描述】:
我正在尝试在其父动态列表内的动态列表上使用 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”的定义
【问题讨论】:
-
我对此有点困惑。
function的签名不应该是Func<Equipment, string>,而不是Func<dynamic,string>? -
可能,但我从来没有得到过这样的结果,因为我收到运行时错误说“选择”丢失。
-
反对哪个
Select,你知道吗?ToObject之后的那个还是list上面的那个? -
另外,我想知道这是否正在发生,因为
Select是一种扩展方法。它实际上并不属于IEnumerable或List。我相信是编译器将对象与其扩展方法相关联,而不是运行时。 -
@AnnL。我相信你在那里是正确的。我只是想找到这种事情的最佳实践,因为我确信这是可能的。
标签: c# asp.net linq dynamic expression