微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据方法参数从 TEntity 中选择和返回自定义属性

如何解决如何根据方法参数从 TEntity 中选择和返回自定义属性

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

我正在尝试创建一个方法来接收要从 TEntity 中选择的属性,并且该方法应该从 table获取这些属性并返回 list 的 { {1}} 的结构是一个 object,其中包含要在 Anonymous type 中发送的要选择的属性

我尝试了什么:

parameters

这个方法的最终用途是什么: 让我们想象一下我们有一个 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 中选择 namecity 的列表,我想使用这样的方法:>

Student

希望你能理解,抱歉我的英语水平。

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

解决方法

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

我同意,返回类型应该是 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;
}

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

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

欢迎任何改进

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。