我有一个包含一堆访问函数的数据库存储库。我现在想要构建一个虚假的存储库,它为单元测试提供类似的功能。与真实存储库不同,这个使用简单列表而不是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
});
}
}
目前,这会产生错误“无法隐式转换类型'System.Collections.Generic.IEnumerable。)我对错误消息并不感到惊讶,但我不知道如何修复转换。
答案 0 :(得分: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>;
}
}
答案 1 :(得分:5)
IEnumerable上只有一个.AsQueryable()扩展方法,所以请将它添加到返回的查询中。
return (from ..).AsQueryable();
答案 2 :(得分:3)
只需在linq查询的末尾添加.AsQueryable()就可以了。