【问题标题】:Returning a single value using LINQ C# [duplicate]使用 LINQ C# 返回单个值 [重复]
【发布时间】:2017-09-11 11:46:20
【问题描述】:

我尝试使用 LINQ 返回一个值,但我返回的是实际查询。

这是我的代码:

var email = from p in dbContext.People
            where p.UserId == UserId
            select new { p.Email };
Contact.Email = email.ToString();

我想获取用户的实际电子邮件地址,但我却取回了查询字符串。

"SELECT [Extent1].[UserId] AS [UserId], [Extent1].[Email] AS [Email]
  FROM [dbo].[Person] AS [Extent1] WHERE [Extent1].[UserId] = @p__linq__0"

【问题讨论】:

  • 选择 p.Email。新的 { .. } 有必要吗?
  • 只是一个快速提示,您可以将此代码缩短为 dbContext.People.FirstOrDefault(p.UserId == UserId);,假设 dbContext.People 派生自 IEnumerable

标签: c# linq


【解决方案1】:

使用FirstOrDefault。它返回序列的第一个元素,如果序列不包含任何元素,则返回默认值。

var email = (from p in dbContext.People
                        where p.UserId == UserId
                        select new { p.Email }).FirstOrDefault();

此外,如果您只想返回 Email,您可以简单地返回它,无需为此使用匿名类型。

var email = (from p in dbContext.People
                    where p.UserId == UserId
                    select p.Email).FirstOrDefault();

【讨论】:

  • 请注意,如果您想要电子邮件而不是匿名类型,则可以省略select new { p.Email }
  • 另外不要忘记,如果记录不存在,FirstOrDefault() 可能会返回 null,因此您需要确定使用 First() 是否最适合您的特定用例如果匹配的记录不存在或在尝试使用返回的对象之前进行空检查,则可能会产生异常。
  • 这很有效,谢谢。 @KyleBurns 是的,我在此代码运行之前进行了空检查。
猜你喜欢
  • 2010-12-05
  • 1970-01-01
  • 2016-01-18
  • 2015-06-26
  • 1970-01-01
  • 2021-08-21
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多