c# - ASP.NET MVC 中的动态 LINQ 分组查询

标签 c# .net asp.net-mvc linq

我想知道如何最好地解决这个问题,因为在我看来,我现在拥有的东西非常适合硬编码的列——我想知道如何扩展它以允许该列是动态的。

Controller :

var dc = new DataContextDC();
return View(dc.items.Where(i=>i.IsPublic == true));

查看:

<% foreach (var grp in Model.GroupBy(s => s.GroupColumn)) { %>
    <%= Html.Encode(grp.Key) %>
    <% foreach (var item in grp) { %>
        <%= Html.Encode(item.Title) %>
    <% } %>
<% } %>

如前所述,目标是让用户选择用哪个列替换上面的“GroupColumn”。我想避免添加任何外部库等。

我看到使用反射(慢,但完全动态)或者因为这是我的应用程序中的一个 View ,我只是为数据库中的每一列复制上面的代码,然后在它上面放一个 switch 语句(快速,肮脏,但有效)

最佳答案

这可能是您想要使用 Linq Dynamic Query 的那种东西C# Linq 示例中包含的库。这样,您就可以像这样编写查询:

var groups = Model.GroupBy("SomeColumn, SomeOtherColumn")

...如果您接受来自用户的列名,这将更容易管理 - 很可能您所拥有的只是作为字符串的列名,并且该库会自动为您将它们解析为 lambda 表达式. (如果您预计可能出现无效输入,则需要捕获 ParseException)。

为了格式化 key ,您可以直接将其传递给 Html.Encode 方法,因为它的默认字符串表示类似于 { ID = 1, Name = Test } 。如果这足够好,那么我会保留它,否则您将不得不使用反射来解析各个关键属性和属性值。

编辑:您可以在任何地方使用该库,如果您下载示例,您将看到它只是一个源代码文件。

关于c# - ASP.NET MVC 中的动态 LINQ 分组查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448611/

相关文章:

javascript - 动态命名部分 div 以备后用?

.NET ServiceModel.Syndication - 更改 RSS 源的编码

c# - 如何创建自定义值注入(inject)以将我的实体映射到我的 View 模型?包括尝试

c# - 字段初始值设定项不能引用非静态字段、方法或属性?

c# - 加载 .NET 程序集依赖项不起作用

.net - 如何在不涉及表示层(即 View 模型)的情况下在 WPF 应用程序中注入(inject)非表示依赖项(如存储库)?

c# - X 交互后使用 TcpClient(套接字或流)通过网络发送和接收失败

c# - 配置FluentNHibernate、FluentMappings.AddFromAssembly;意义

.net - CommandBehavior.SingleRow 导致数据库连接保持打开状态?

c# - 检查列表中的所有元素是否在其属性之一中都有值 - 这可以在一行中完成吗?