使用linq从列表中获取特定的x项

本文关键字:获取 linq 列表 使用 | 更新日期: 2023-09-27 18:29:16

我正在尝试从我创建的列表中获取特定的x项。

List<Item> il = (List<Item>)(from i in AllItems
                             where i.Iid == item.Iid
                             select i).Take(Int32.Parse(item.amount));

我得到以下错误:

"无法将类型为'd_3a`1[AssetManagement.Entity.Item]的对象强制转换为类型"System.Collections.Generic.List`1[AassetManagement.entity.Item]"。"

如何修复?为什么会发生这种情况?

使用linq从列表中获取特定的x项

正如KingKing正确指出的那样,您在末尾缺少".ToList()"调用。否则,该查询将导致无法强制转换为List的IQueryable。

作为侧节点,我更喜欢使用隐式变量类型声明,如

var il = (from i in AllItems
    where i.Iid == item.Iid
    select i).Take(Int32.Parse(item.amount)).ToList();

这样,即使没有"ToList",它也不会抛出异常(但可能不是您所期望的)

List<Item> il = (from i in AllItems
                 where i.Iid == item.Iid
                 select i).Take(Int32.Parse(item.amount)).ToList();

注意:只能在具有InheritanceImplementation关系的对象之间执行强制转换。试着记住这一点。

这个语法不是更可读吗?(与您的查询唯一不同的是ToList()

List<Item> il = AllItems.Where(i => i.Iid == item.Iid)
                        .Take(Int32.Parse(item.amount))
                        .ToList();

我从不喜欢使用括号来实现查询(from..where..select).ToList();