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

时间:2010-06-22 08:14:43

标签: c# unit-testing model-view-controller

我有一个包含一堆访问函数的数据库存储库。我现在想要构建一个虚假的存储库,它为单元测试提供类似的功能。与真实存储库不同,这个使用简单列表而不是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。)我对错误消息并不感到惊讶,但我不知道如何修复转换。

3 个答案:

答案 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()就可以了。