获取列表中的第一个项目

时间:2013-11-17 15:15:39

标签: c# linq list ienumerable

我正在使用此功能获取组列表

public static IEnumerable<QuizGroups> GetGroups(string sectorId)
{

    var Quizes = _QuizDataSource.AllQuizGroups.Where(x => x.Subtitle == sectorId);
    return Quizes;

}

但这会全部返回,我想返回列表中的第一个组。

如何更改语句以获取第一组?

3 个答案:

答案 0 :(得分:0)

尝试FirstFirstOrDefault

public static IEnumerable<QuizGroups> GetGroups(string sectorId)
{

var Quizes = _QuizDataSource.AllQuizGroups.FirstOrDefault(x => x.Subtitle == sectorId);
return Quizes;

}

答案 1 :(得分:0)

public static QuizGroups GetGroups(string sectorId)
{  
     return  QuizDataSource.AllQuizGroups.FirstOrDefault(
               x => x.Subtitle == sectorId);
}

或向集合类添加索引器(假设MyQuizGroupsCollection的类型为_QuizDataSource

 public class MyQuizGroupsCollection: IEnumerable<QuizGroups>
 {
     // other stuff
     public QuizGroups this[string sectorId]
     { get  { return FirstOrDefault(x => x.Subtitle == sectorId); } }
 }

...然后你可以简单地写

  var Quizes = _QuizDataSource[sectorId];

答案 2 :(得分:0)

您可以使用First或FirstOfDefault并使用单个元素返回enumerable:

    public static IEnumerable<QuizGroups> GetGroups(string sectorId)
    {
        return new[]
        {
            _QuizDataSource.AllQuizGroups.FirstOrDefault(x => x.Subtitle == sectorId)
        };
    }

另请注意:

  • 如果您打算始终只返回一个元素,请考虑重构GetGroups方法仅返回QuizGroups
  • AllQuizGroups属性可能为null。为该属性添加空值检查。
  • 您应该考虑使用C#命名约定。
    • 本地变量名称应为Camel Cased;所以它应该是:var quizes
    • 如果属性_QuizDataSource是公开的,则应将QuizDataSource重命名为_quizDataSource;如果属于私有,则应将quizDataSource_重命名.¹

¹ - 对于私人领域是否使用{{1}}是一个热议,请阅读更多信息:https://stackoverflow.com/questions/1630844/c-sharp-member-variables-fields-naming-convention