用LINQ表达式替换foreach循环

时间:2013-10-19 02:27:59

标签: linq lambda

替换foreach循环

IList<EmployeeSearch> empItems = new List<EmployeeSearch>();
EmployeeSearch empItem = new EmployeeSearch();

foreach (var _emp in mediaResults.results)
{
    empItem.Title = _emp.title;
    empItem.Desc = _emp.description;
    empItems.Add(empItem);
}

使用以下linq表达式并收到错误:

empItems = from _emp in employeeResults.results
           select new EmployeeSearch
           {
               Title = _emp.title,
               Desc = _emp.description                                          
           };

错误:

  

错误2无法将类型'System.Collections.Generic.IEnumerable'隐式转换为'System.Collections.Generic.IList'。存在显式转换(您是

2 个答案:

答案 0 :(得分:2)

您需要将其转换为List:

(from _emp in employeeResults.results
                             select new EmployeeSearch
                                 {
                                     Title = _emp.title,
                                     Desc = _emp.description                                          
                                 }).ToList();

或者......更改您的empItems定义以使用var隐式输入:

var empItems = from _emp in employeeResults.results
                             select new EmployeeSearch
                                 {
                                     Title = _emp.title,
                                     Desc = _emp.description                                          
                                 };

empItems将是IEnumerableEmployeeSearch个对象。

答案 1 :(得分:1)

在查询结尾处添加对ToList扩展程序方法的调用:

empItems = 
    (from _emp in employeeResults.results
     select new EmployeeSearch
     {
         Title = _emp.title,
         Desc = _emp.description                                          
     })
    .ToList();

或者如果您可以重构代码以使用IEnumerable<T>代替,那可能会更好:

IEnumerable<EmployeeSearch> empItems =
    from _emp in employeeResults.results
    select new EmployeeSearch
    {
        Title = _emp.title,
        Desc = _emp.description                                          
    };

如果您只是遍历结果并且实际上不需要在结果集中添加/删除元素或者对结果具有每个索引的访问权限,则通常应该使用此方法。将查询结果转换为列表需要在内存中分配单个连续数组,这是一项相当昂贵的操作。