转换Func<;中的对象类型>;
本文关键字:对象 类型 gt lt 转换 Func | 更新日期: 2023-09-27 18:21:13
我有一个存储库对象,用于封装数据存储的数据类型。我已经定义了在整个应用程序中使用的对象,在存储库中,我必须将它们映射到数据存储公开的类型。到目前为止,我有以下内容:
//The class object I work with inside my code
public class Class
{
public string Name {get; set;}
}
public class ClassRepository
{
public Class GetClass(Func<Class, bool> query)
{
//newQuery = Do something to convert the Class object in Query to internalClass exposed from Database
using (var context = new DBEntities())
{
return Mapper.Map<Class>(context.InternalClasses.FirstOrDefault(newQuery));
}
}
}
我想弄清楚的是如何将Func<Class, bool>
转换为Func<internalClass, bool>
,这样我就不必向代码公开数据资源使用的对象。
我假设您使用的是AutoMapper,不要使用带有IQueryable对象的Mapper.Map。将QueryableExtensions
名称空间与其Project().To<T>()
方法一起使用,它正是为这种情况而设计的。
using AutoMapper.QueryableExtensions;
public class ClassRepository
{
public Class GetClass(Expression<Func<Class, bool>> query)
{
using (var context = new DBEntities())
{
return context.InternalClasses.Project().To<Class>().FirstOrDefault(query);
}
}
}
此外,您应该传入Expression<Func<Class, bool>>
而不是Func<Class, bool>
,否则您的查询将不会在服务器端发生。它仍然可以使用Func<Class, bool>
,但您将通过网络返回所有行,然后在内存中的客户端上执行筛选。对于大型表,这将给您带来非常糟糕的性能。