C#Linq返回对象

时间:2013-11-12 14:09:23

标签: c# linq

我正在尝试实施一种方法:

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

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

7 个答案:

答案 0 :(得分:10)

尝试

return result.FirstOrDefault();

答案 1 :(得分:2)

您的选择可以返回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将抛出异常。

答案 2 :(得分:2)

你需要归还一个裁判,而不是很多裁判。

使用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

答案 3 :(得分:1)

如果您希望找到结果,您应该

Return result.Single();

如果不确定是否存在,请检查null:

Return result.SingleOrDefault();

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

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

答案 4 :(得分:0)

试试这个:

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

也无需进行强制转换以返回结果。

当你说它应该返回对象时,它会做什么?

答案 5 :(得分:0)

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

这将返回Referee个对象。

答案 6 :(得分:0)

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

e.g。 return (Referee)result.SingleOrDefault();