从linq查询中获得价值(需要想法/建议)

时间:2019-05-15 12:13:33

标签: c# linq

我需要帮助以从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();

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

1 个答案:

答案 0 :(得分:5)

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

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

所以您可能会做类似的事情:

item.FirstOrDefault().Email

或者也许:

item[0].Email

或者您可以遍历列表等。

请记住以下几点:

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

    items.FirstOrDefault()?.Email