我正在尝试根据子子字段的值对动态对象集合执行Linq查询,然后将不同字段的单个值作为整数返回。
到目前为止我所拥有的是:
int itemId = (
from x in ((IEnumerable<dynamic>)allpets.pets.collected)
where x.stats.speciesId == 294
select x.itemId
).SingleOrDefault()
问题是,有时发现的结果没有字段x.itemId
,最终导致异常。
&#39; System.Dynamic.DynamicObject&#39;不包含&#39; itemId&#39;
的定义
我尝试了x?.itemId
,x.?itemId
,x.itemId?
和?x.itemId
这些似乎是我可以为空值捕获的唯一地方。
另一部分,这是一个更复杂的嵌套linq选择的一部分,值294
所在的位置,实际上是p.stats.speciesId
(下面的片段,所以你可以看到为什么这需要是内联)
List<MasheryTypes.pet> pets = ((IEnumerable<dynamic>)json.pets).Select(
p => new MasheryTypes.pet(
Convert.ToBoolean(p.canBattle),
p.creatureId,
p.name,
p.family,
p.icon,
p.qualityId,
new MasheryTypes.petstats(
p.stats.speciesId,
p.stats.breedId,
p.stats.petQualityId,
p.stats.level,
p.stats.health,
p.stats.power,
p.stats.speed
),
p.strongAgainst?[0],
p.typeId,
p.weakAgainst?[0],
cageable.Any(
c => c == p.creatureId
),
p.itemId = (from x in ((IEnumerable<dynamic>)allpets.pets.collected)
where x.stats.speciesId == p.stats.speciesId
select x.itemId).SingleOrDefault()
)
).ToList();
答案 0 :(得分:0)
试试这个。
int itemId = (
from x in ((IEnumerable<dynamic>)allpets.pets.collected)
where x.GetType().GetProperty("itemId") != null && x.stats.speciesId == 294
select x.itemId
).SingleOrDefault()