gpt4 book ai didi

c# - 将 IQueryable 对象转换为另一个对象?

转载 作者:太空狗 更新时间:2023-10-29 19:56:18 25 4
gpt4 key购买 nike

我不知道关键字是什么,所以这是我想要的示例:

return from i in userRepo.GetUsers()
select new SimpleUser{
i.UserId,
i.Name
};

userRepo.GetUsers()返回类型 IQueryable<User> .我想将其转换为 IQueryable<SimpleUser>我可以限制对 User 的某些属性的访问域。

如果不像这样对翻译进行硬编码,我该如何做到这一点?像 automapper 或 ValueInjecter 这样的工具呢,它们是如何做到这一点的?

还有,这个技术叫什么?

最佳答案

您必须对翻译进行硬编码,或者您必须先将其转换为 IEnumerableIQueryable 表示转换为使用的提供程序中的某些执行的表达式树 - 在您的情况下,我相信它将是 Entity Framework 。您不能在此类查询中使用任何自动映射,因为它将被转换为 SQL,而 SQL 将无法理解您的 .net 方法或 AutoMapper。自定义类型的投影是查询的一部分,必须进行硬编码。您可以为 IQueryable 创建自定义扩展方法,并在需要的地方重用它:

public static IQueryable<SimpleUser> ProjectToSimpleUser(this IQueryable<User> query)
{
return query.Select(u => new SimpleUser
{
// Here map your fields
});
}

现在您可以使用:

return repo.GetUsers().ProjectToSimpleUser();

在 Entity Framework 的情况下 SimpleUser 不能是映射实体。

关于c# - 将 IQueryable<T> 对象转换为另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com