C# 使用linq从列表中获取特定的x项
我试图从我创建的列表中获取特定的x项C# 使用linq从列表中获取特定的x项,c#,linq,C#,Linq,我试图从我创建的列表中获取特定的x项 List<Item> il = (List<Item>)(from i in AllItems where i.Iid == item.Iid select i).Take(Int32.Parse(item.amount)); List il=(List)(从所有项中的i开始) 其中i.Iid==项.Iid 选择i).
List<Item> il = (List<Item>)(from i in AllItems
where i.Iid == item.Iid
select i).Take(Int32.Parse(item.amount));
List il=(List)(从所有项中的i开始)
其中i.Iid==项.Iid
选择i).Take(Int32.Parse(item.amount));
我得到以下错误:
“无法将类型为“d_u3a`1[AssetManagement.Entities.Item]”的对象强制转换为类型为“System.Collections.Generic.List`1[AssetManagement.Entities.Item]”。”
如何修复它以及为什么会发生这种情况?列出il=(来自AllItems中的i)
List<Item> il = (from i in AllItems
where i.Iid == item.Iid
select i).Take(Int32.Parse(item.amount)).ToList();
其中i.Iid==项.Iid
选择i).Take(Int32.Parse(item.amount)).ToList();
注意:只能在具有继承
或实现
关系的对象之间执行强制转换。请记住这一点。正如KingKing正确指出的那样,您缺少结尾处的“.ToList()”调用。否则,该查询将导致无法转换为列表的IQueryable
作为侧节点,我更喜欢使用隐式变量类型声明,如
var il = (from i in AllItems
where i.Iid == item.Iid
select i).Take(Int32.Parse(item.amount)).ToList();
这样,即使没有“ToList”,它也不会抛出异常(但可能不是您所期望的)这种语法不是更具可读性吗?(与查询的唯一区别是
ToList()
)
List il=AllItems.Where(i=>i.Iid==item.Iid)
.Take(Int32.Parse(item.amount))
.ToList();
我从不喜欢使用括号来具体化查询
(from..where..select).ToList()
您可以将Where
和Take
与@Default合并,我不确定。项目可能不在枚举的开头。
List<Item> il = AllItems.Where(i => i.Iid == item.Iid)
.Take(Int32.Parse(item.amount))
.ToList();