实体框架核心2

时间:2019-09-25 12:36:00

标签: c# entity-framework entity-framework-core

我正在创建数据的表格网格,并且每个列标题都可以排序(升序和降序),并且可以通过列名称下方的文本框进行过滤。

我进行了一些挖掘工作,以找出生成针对实体框架的LINQ查询的最佳方法,而我发现的最佳方法是:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/sort-filter-page?view=aspnetcore-3.0

那只使用了一个很大的开关/盒(仅订购...甚至没有考虑多个过滤选项)。当然有比这更好,更简洁的方法了吗?

如果这确实是我要走的路,我半想只使用我的旧sproc并用EF调用该sproc。

理想情况下,我想要这样的东西:

    return myContext.Where(x => 
x.%thisisadynamicfield%.Contains("%somefiltervalue%" && 
x.%anotherdynamicfield%.Contains("%someothervalue%" && ...)
.OrderBy(x => x.%someorderybydynamicfield%)

我可以使用条件语句来确定升序还是降序,但是我真的很想尽可能地压缩其他所有内容,并且上面链接的MS文章看起来像代码呕吐物,它只涵盖了我的一部分需求。

编辑:通常,几乎总是这样,一旦我在这里发布并尝试更多的搜索工作,我就会找到想要的东西。我刚刚发现了这个:https://github.com/harshwPro/EntityFrameworkPaginate,看起来非常有前途。如果可以解决我的问题,我将在这里报告。

编辑2:好吧,我在第一次编辑中引用的github项目肯定比我最初发布的MS文章更干净的解决方案,但是它仍然使我不得不编写一个巨大的条件来按属性生成过滤器。使用该解决方案,我必须编写如下内容: dataPagingModel.Filters.Add(true, x => x.MyCoolProperty.Contains("blah"));,但必须根据我的角度表示层发布的参数有条件地添加新滤镜-开关/盒,或一些巨大的if / else块。我理想的情况是一种仅循环遍历所有已发布的过滤器列表并动态地将这些过滤器添加到循环中的方法。所以我想我的问题归结为,有没有办法在lambda表达式中动态地(通常)访问对象的属性?

编辑3:我认为这篇SO帖子有我需要的答案:Generic method to filter a list object

0 个答案:

没有答案