【问题标题】:Get value from a linq query(need idea/suggestion)从 linq 查询中获取价值(需要想法/建议)
【发布时间】:2019-05-15 12:13:33
【问题描述】:

我需要帮助才能从我的 linq 查询中获取价值。 使用 firstordefault()

var item = (from o in db.Employee
                    join a in db.EmployeeLineManager on o.Id equals a.EmployeeID
                    where o.Id == Id
                    select new
                    {
                        AddedBy = o.LastName + " " + o.FirstName,
                        LineManagerId = a.LineManagerId,
                        Email = o.Email
                    }).FirstOrDefault();

我可以获取项目中的内容(例如,如果我想获取电子邮件,我可以使用 item.Email)

但是,如果我使用 ToList()

var item = (from o in db.Employee
                    join a in db.EmployeeLineManager on o.Id equals a.EmployeeID
                    where o.Id == Id
                    select new
                    {
                        AddedBy = o.LastName + " " + o.FirstName,
                        LineManagerId = a.LineManagerId,
                        Email = o.Email
                    }).ToList();

我如何从项目中获取价值(例如,我想获取电子邮件,项目。电子邮件不起作用,请问我可以使用什么来获取价值?

【问题讨论】:

  • 在第二种情况下,item 是一个 list 项。它应该命名为items 以避免任何混淆。您可以像访问任何其他列表或数组一样访问其内容,例如items[0].Emailforeach(var item in items){ item.Email.....}
  • @PanagiotisKanavos 谢谢

标签: c# linq


【解决方案1】:

在第一个示例中,item 是单个对象。在第二个例子中,它是一个对象的list。 (顾名思义,ToList 将结果转换为一个列表。)

List<T> 没有名为Email 的属性。但它确实包含零个或多个在这种情况下的元素。

所以你可能会这样做:

item.FirstOrDefault().Email

或许:

item[0].Email

或者你可以遍历列表,等等。

要记住的几件事:

  1. item 在这一点上是错误的名称。这是一个集合,所以称它为items。变量名称对于您理解自己的代码很重要。
  2. 列表可能为空,在这种情况下,上述两个示例用法都会引发异常。您应该始终对null 进行一些检查。例如:

    items.FirstOrDefault()?.Email
    

【讨论】:

  • 关于空值检查,异常可能是这里想要的结果。但是你会期望一个明确的异常消息(和/或类型),而不是一个空引用异常,它不能准确地告诉消费者 what 出了问题。因此,仍然需要检查+清除消息,但这并不意味着您需要从整体上避免异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2013-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多