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

时间:2013-08-26 21:53:01

标签: c# linq

我正在尝试从我创建的列表中获取特定的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]'。”

如何解决这个问题?为什么会这样?

3 个答案:

答案 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();

注意:只能在具有InheritanceImplementation关系的对象之间进行投射。试着记住这一点。

答案 2 :(得分:3)

这种语法更具可读性吗? (与您的查询的唯一区别是ToList()

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

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