如何从具有其他嵌套值的对象数组中返回Linq中的单个值整数

时间:2016-07-17 19:23:37

标签: c# linq c#-6.0

我正在尝试根据子子字段的值对动态对象集合执行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?.itemIdx.?itemIdx.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();

1 个答案:

答案 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()