我正在尝试从我创建的列表中获取特定的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.Entities.Item]'类型的对象转换为'System.Collections.Generic.List`1 [AssetManagement.Entities.Item]'。”
如何解决这个问题?为什么会这样?
答案 0 :(得分:5)
正如KingKing正确指出的那样,你最后错过了“.ToList()”调用。没有它,该查询将导致无法转换为List的IQueryable。
作为一个副节点,我更喜欢使用隐式变量类型声明,比如
var il = (from i in AllItems
where i.Iid == item.Iid
select i).Take(Int32.Parse(item.amount)).ToList();
这样,即使没有“ToList”也不会抛出异常(但也许它不会是你所期望的)
答案 1 :(得分:3)
List<Item> il = (from i in AllItems
where i.Iid == item.Iid
select i).Take(Int32.Parse(item.amount)).ToList();
注意:只能在具有Inheritance
或Implementation
关系的对象之间进行投射。试着记住这一点。
答案 2 :(得分:3)
这种语法更具可读性吗? (与您的查询的唯一区别是ToList()
)
List<Item> il = AllItems.Where(i => i.Iid == item.Iid)
.Take(Int32.Parse(item.amount))
.ToList();
我从不喜欢使用括号来实现查询(from..where..select).ToList();