C# 使用linq从列表中获取特定的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).

我试图从我创建的列表中获取特定的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).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();