如何根据方法参数从 TEntity select 和 return 自定义属性

How to select and return custom properties from a TEntity based on a method parameter

我正在开发针对 .Net 5Entity Framework core 的高级通用存储库。

我正在尝试创建一个方法,该方法将从 TEntity 接收要 selected 的属性,并且此方法应该从 table 和 return objectlist 它们的结构是一个 Anonymous type 包含要在 parameters.

中发送的 select 属性

我试过的:

public virtual object GetPartial<TEntity> ( params Expression<Func<TEntity, object>>[] propertiesToBeSelected )
{
    var result = (from x in Context.Set<TEntity>() select propertiesToBeSelected).ToList();
    return result;
}

这个方法的最终用途如何: 假设我们有一个 Student 实体,我想 select 只是 Student 中的 namecity 的列表,我想使用像这样的方法这 :

MyXRepo.GetPartial<Student>(x => x.Name, x => x.City);

希望你能理解,对不起我的英语水平。

我知道这不是正确的方法,所以请帮忙解决这个问题?

恕我直言,我没有太多经验,我不会尝试讨论哪种模式是错的还是好的 :)。

我同意,返回的类型应该 List<object> 而不是对象本身,我更喜欢将这种逻辑添加到扩展中。

这段代码我已经测试过了,自己试试看是否合适(当然,忽略控制器类型)

public IActionResult Test()
{
    var result = myService.GetPartial<Company>(x=> new { x.Name1 , x.Notes});
    return Ok();
}

和实施

public IEnumerable<object> GetPartial<T>(Func<T, object> selector)
            where T:class
{
    var t = DbContext.Set<T>().Select(selector).ToList();
    return t;
}

再一次,这是我所理解的版本。而且它更灵活一点。取而代之的是属性列表方法获取函数返回对象,无论你是什么类型 want.You 必须添加一些额外的字符(lambda 约定)和转换(如果需要),但你也可以获得强类型对象或创建另一个实现

IEnumerable<TModel> GetPartial<TEntity, TModel>(Func<TEntity, TModel>){... 

欢迎任何改进

为什么不改用 OData?这已经是一个定义明确的标准,可以让您完全按照自己的意愿行事。已经有一个可用的库,应该可以很容易地与 entity framework 后端连接,因为它适用于 IQueryable 类型。