C# 从linq查询中获取值(需要想法/建议)

C# 从linq查询中获取值(需要想法/建议),c#,linq,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 {

我需要帮助从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();
如何从项中获取值例如,我想获取电子邮件,项。电子邮件不起作用,请问我可以使用什么来获取值?

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

列表没有称为电子邮件的属性。但它确实包含零个或多个元素,在这种情况下是这样的

所以你可以做一些类似的事情:

item.FirstOrDefault().Email
或许:

item[0].Email
或者你可以循环浏览列表,等等

要记住以下几点:

此时项的名称错误。这是一个集合,所以称之为项目。变量名对于理解自己的代码很重要。 列表可能为空,在这种情况下,上述两种示例用法都会引发异常。你应该经常做一些空值检查。例如:

items.FirstOrDefault()?.Email
在第一个示例中,项是单个对象。在第二个示例中,它是一个对象列表。顾名思义,ToList将结果转换为列表

列表没有称为电子邮件的属性。但它确实包含零个或多个元素,在这种情况下是这样的

所以你可以做一些类似的事情:

item.FirstOrDefault().Email
或许:

item[0].Email
或者你可以循环浏览列表,等等

要记住以下几点:

此时项的名称错误。这是一个集合,所以称之为项目。变量名对于理解自己的代码很重要。 列表可能为空,在这种情况下,上述两种示例用法都会引发异常。你应该经常做一些空值检查。例如:

items.FirstOrDefault()?.Email

在第二种情况下,项目的可能重复项是项目列表。它应该是命名的项目,以避免任何混淆。您可以像访问任何其他列表或数组一样访问其内容,例如items[0]。items{item.Email…}中的Email或foreachvar项。@PanagiotisKanavos谢谢第二种情况下的可能重复项是项目列表。它应该是命名的项目,以避免任何混淆。您可以像访问任何其他列表或数组一样访问其内容,例如项[0]。项{item.Email…}中的电子邮件或foreachvar项。@PanagiotisKanavos谢谢您关于空检查,此处可能会出现异常。但是,您希望得到一个明确的异常消息和/或类型,而不是一个空引用异常,它不能准确地告诉消费者出了什么问题。因此,仍然需要检查+清除消息,但这并不意味着您需要从整体上避免异常。对于空检查,异常可能是此处所需的结果。但是,您希望得到一个明确的异常消息和/或类型,而不是一个空引用异常,它不能准确地告诉消费者出了什么问题。因此,仍然需要一条检查+清除消息,但这并不意味着您需要从整体上避免异常。