使用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]"。"
如何修复?为什么会发生这种情况?
正如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();
注意:只能在具有Inheritance
或Implementation
关系的对象之间执行强制转换。试着记住这一点。
这个语法不是更可读吗?(与您的查询唯一不同的是ToList()
)
List<Item> il = AllItems.Where(i => i.Iid == item.Iid)
.Take(Int32.Parse(item.amount))
.ToList();
我从不喜欢使用括号来实现查询(from..where..select).ToList();