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

发布于 2024-09-06 05:25:30 字数 699 浏览 4 评论 0原文

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

I have a database repository with a bunch of access functions. I now want to build a fake repository which provides similar functionality for unittests. Unlike the real repository, this one uses simple lists instead of linqtosql generated model classes.

Most fake repository functions look exactly like the real ones, just with an extra ToQueryable() at the end. However, I now have one that seems to require a more complicated cast.

   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
                    });
          }
    }

Currently, this gives the error "Cannot implicitly convert type 'System.Collections.Generic.IEnumerable.) I am not surprised by the error message but I have no idea how fix the cast.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

樱花坊 2024-09-13 05:25:30

你可以这样做:

   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>;
          }
    }

you could do:

   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>;
          }
    }
暖阳 2024-09-13 05:25:30

IEnumerable 上有一个 .AsQueryable() 扩展方法专门用于此目的,因此请将其添加到返回的查询中。

return (from ..).AsQueryable();

There is an .AsQueryable() extension method on IEnumerable just for this, so add that to your returned query.

return (from ..).AsQueryable();
傲世九天 2024-09-13 05:25:30

只需在 linq 查询末尾添加 .AsQueryable() 即可使其工作。

Just adding .AsQueryable() at the end of your linq query will make it work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文