当前位置: 首页 > 编程语言 > C#

存储库共享

时间:2023-04-10 19:48:51 C#

使用OrderBy存储库使用OrderBy我正在尝试创建一个存储库类,其中包含一个根据“排序”参数对结果进行排序的方法。我需要将它作为参数传递,因为我试图非常严格地确保我的存储库不返回IQueryable而只返回List。问题是我不知道如何让它满足以下要求:允许多列。强类型返回的实体(没有列作为参数的列)。能够将特定列设置为降序。这是可能的,还是存储库允许退货订购没有用?存储库是否应该只能执行CRUD操作?也许返回IQueryable是最好的选择?也许你需要这样的东西:publicclassOrdering{privatereadonlyFunc,IOrderedQueryable>transform;privateOrdering(Func,IOrderedQueryable>transform){this.transform=transform;}publicstaticOrderingCreate(Expression>primary){returnnewOrdering(query=>query.OrderBy(primary));}publicOrderingThenBy(Expression>secondary){returnnewOrdering(query=>transform(query).ThenBy(secondary));}//还有更多的降序方法..internalIOrderedQueryableApply(IQueryablequery){returntransform(query);然后,客户端可以创建一个要传递给存储库的Ordering,存储库可以使用IQueryable调用Apply。那有意义吗?示例(有点傻)使用:varordering=Ordering.Create(fi=>fi.Length).ThenBy(fi=>fi.Name);这是有争议的,但我认为您的存储库应该只返回data。让您的消费类担心集合的顺序。这背后的思考过程非常简单,消费者类无论如何都会决定顺序。因此,他们可以将它传递给存储库中手工制作的orderby生成器,让它完成工作,或者他们可以只使用linq并对从存储库返回的集合进行排序。我认为后一种选择更容易实现,更不容易出错,并且在阅读代码时更有意义,但我再次认为我的意见没有实际意义。我认为直接返回IQueryable通常是最好的选择。例如,假设您有一个查询数据库以返回特定表或视图的方法。如果存储库的客户端只需要前10条记录,并且具有您不期望的自定义??条件和排序,则可以通过返回IQueryable来允许这样做。客户只需要添加.Where(...).OrderBy(...).Take(10);使用IQueryable,跨数据层的调用将自动适应并只拉取10条记录。如果您返回一个列表,数据库查询将获取每条记录,然后需要在您的应用程序中进行过滤。这无缘无故地增加了巨大的处理/网络/等开销。以上就是C#学习教程:使用OrderBy仓库分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: