Resharper重新设计了for循环.这条LINQ语句在一行中做得太多了吗?

Sea*_*son 3 .net c# linq resharper refactoring

[WebMethod(Description = "Return all activities by Task.")]
public IList<ActivityDto> GetActivitiesByTaskID(int taskID)
{
    IList<Activity> activities = ActivityDao.GetByTaskID(taskID);
    IList<ActivityDto> activityDtos = new List<ActivityDto>(activities.Count);

    foreach(Activity activity in activities)
        activityDtos.Add(ActivityDto.Create(activity));

    return activityDtos;
}
Run Code Online (Sandbox Code Playgroud)

缩写为:

[WebMethod(Description = "Return all activities by Task.")]
public IList<ActivityDto> GetActivitiesByTaskID(int taskID)
{
    return ActivityDao.GetByTaskID(taskID).Select(ActivityDto.Create).ToList();
}
Run Code Online (Sandbox Code Playgroud)

我觉得因为我不得不问 - 它可能做得太多了.但是,引起我担忧的唯一部分是将函数传递给Select语句.我认为我还没有充分利用这种语法,而且它实际上是一种非常简洁的表达方式.

我想知道其他程序员是否会对这种缩短版本的方法感到不安.

编辑:此外,对效率比较的评论将不胜感激.我知道LINQ因在大型数据集上工作速度慢而臭名昭着.我想说在某些情况下可以枚举10,000-20,000条记录.

Ada*_*dam 10

不,它富有表现力和简洁.

第一个版本是关于如何迭代列表并转换元素.

第二个版本是关于结果应该是什么.

创建LINQ是为了给我们提供强大,可读的工具来处理集合并对其进行转换.这正是你在第二个例子中使用它的原因.

对于不熟悉方法组语法的人,另一个选项可能是使用查询表达式:

var result = from task in ActivityDao.GetByTaskID(taskID)
             select ActivityDto.Create(task);
return result.ToList(); // if you really need it as a list
Run Code Online (Sandbox Code Playgroud)