【问题标题】:C# query in Linq [duplicate]Linq中的C#查询[重复]
【发布时间】:2017-04-03 07:29:06
【问题描述】:

我在 Visual Studio 2015 中使用 C#。 我有一个List<MagicItem> magicItemList,我正在尝试使用 Linq 进行简单查询,以获取与用户输入的 Id 匹配的对象。 这是我的代码:

int itemId = Convert.ToInt32(Console.ReadLine());

var query = from MagicItem magicItem in magicItemList
                where magicItem.Id == itemId
                select magicItem;

让我困惑的是query 的类型是System.Collections.Generic.IEnumerable,所以我无法将它的任何属性作为普通对象获取。

有没有办法转换它,以便我可以将它用作普通对象?提前致谢。

这是我的 MagicItem 类:

class MagicItem
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int StockLevel { get; set; }
    }

【问题讨论】:

    标签: c# linq list arraylist visual-studio-2015


    【解决方案1】:

    您可以使用FirstOrDefault() 来获取您的物品。如果没有带有 id 的项目,您将获得 null。这就是为什么你必须检查 null。

    var item = magicItemList.FirstOrDefault(x => x.Id = itemId);
    if(item != null)
    {
        //do something with item
    }
    

    使用您的代码,您将获得一个集合,因为您正在检查一个属性,并且您将获得集合中与该属性匹配的所有项目。

    欲了解更多信息,请查看MSDN

    【讨论】:

      【解决方案2】:

      它将获取与您的条件magicItem.Id == itemId 匹配的所有实例。 如果您确定这将是单个项目,我建议使用query.FirstOrDefault() 来获取该项目。

      【讨论】:

        【解决方案3】:

        问题是您不会本身 获得一个元素:在代码级别,不知道 id 是唯一的

        您可以使用.First().FirstOrDefault() 来获取与条件匹配的第一个元素

        var query = (from MagicItem magicItem in magicItemList
                        where magicItem.Id == itemId
                        select magicItem).First();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-07
          • 1970-01-01
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          • 2017-05-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多