繁体   English   中英

C#Linq返回对象

[英]C# Linq return object

我正在尝试实现一个方法:

  public Referee GetRefereeById(int refereeId)
        {
            var result = from b in Referees
                         where b.PersonId.Equals(refereeId)
                         select b;
            return (Referee)result;
        }

该方法应该返回一个裁判对象。 知道我做错了什么吗?

尝试

return result.FirstOrDefault();

您的选择可以返回1个以上的裁判。 尝试

public Referee GetRefereeById(int refereeId)
    {
        var result = (from b in Referees
                     where b.PersonId.Equals(refereeId)
                     select b).FirstOrDefault();
        return (Referee)result;
    }

您可以使用.Single(),但FirstOrDefault是一个更安全的选项。 我假设PersonId应该是唯一的,所以这应该没关系,但如果没有找到匹配的数据,Single将抛出异常。

你需要返回一个裁判,而不是很多裁判。

使用FirstOrDefault - 返回序列的第一个元素,如果序列不包含元素,则返回默认值。 (MSDN: http//msdn.microsoft.com/en-us/library/bb340482%28v=vs.110%29.aspx

public Referee GetRefereeById(int refereeId)
{
   return Referees.FirstOrDefault(r => r.PersonId.Equals(refereeId));
}

如果找不到,则返回null

如果您希望找到结果,您应该这样做

Return result.Single();

如果不确定它是否存在并检查null:

Return result.SingleOrDefault();

我将实现Single()方法而不是First()。 您的方法将单个裁判返回给调用者。 你想确保在每种情况下你真正得到一个独特的裁判。 如果有超过1个匹配您的标准,那么您在应用程序中引入了一些非常微妙的错误。 假设你正在反对正确的记录,但你可能正在检索一个完全不同的记录。

如果你有一个你在某种记录上订购的列表并且真的打算根据排序获得第一行,那么最好使用First()方法。

尝试这个:

public Referee GetRefereeById(int refereeId)
        {
            var result = from b in Referees
                         where b.PersonId == refereeId
                         select b;
            return result.FirstOrDefault();
        }

也没有必要进行转换以返回结果。

当你说它应该返回物体时,它会做什么?

var result = (from b in Referees
              where b.PersonId.Equals(refereeId)
              select b).SingleOrDefault();
return result;

这将返回一个Referee对象。

您的查询(更具体地说, Where函数)可以返回零结果。 根据您的需要使用SingleSingleOrDefaultFirstFirstOrDefault

例如return (Referee)result.SingleOrDefault();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM