在select语句中从IEnumerable转换为Queryable?

duf*_*ffy 3 c# model-view-controller unit-testing

我有一个包含一堆访问函数的数据库存储库.我现在想要构建一个虚假的存储库,它为单元测试提供类似的功能.与真实存储库不同,这个使用简单列表而不是linqtosql生成的模型类.

大多数假存储库函数看起来与真实存储库函数完全相同,最后只需要额外的ToQueryable().但是,我现在有一个似乎需要更复杂的演员.

   public class FakeUserRepository : IUserRepository {
          public IQueryable<SelectListItem> GetRecords(int userid) {
                    // fake_table is a list
                    return (from a in fake_table select
                    new SelectListItem {
                        Value = a.ID.ToString(),
                        Text = a.Name
                    });
          }
    }
Run Code Online (Sandbox Code Playgroud)

目前,这给出了错误"无法隐式转换类型'System.Collections.Generic.IEnumerable.)我对错误消息并不感到惊讶,但我不知道如何修复转换.

Koy*_*nov 8

你可以这样做:

   public class FakeUserRepository : IUserRepository {
          public IQueryable<SelectListItem> GetRecords(int userid) {
                    // fake_table is a list
                    return (from a in fake_table select
                    new SelectListItem {
                        Value = a.ID.ToString(),
                        Text = a.Name
                    }).AsQueryable<SelectListItem>;
          }
    }
Run Code Online (Sandbox Code Playgroud)


Han*_*ing 5

IEnumerable上有一个.AsQueryable()扩展方法就是为了这个,所以将它添加到你返回的查询中.

return (from ..).AsQueryable();
Run Code Online (Sandbox Code Playgroud)