0

更换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”。存在显式转换(您是

4

2 回答 2

2

您需要将其转换为列表:

(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将是一个IEnumerable对象EmployeeSearch

于 2013-10-19T02:29:31.883 回答
1

ToList在查询末尾添加对扩展方法的调用:

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

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

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

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

于 2013-10-19T02:30:43.263 回答