gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:11:23 42 4
gpt4 key购买 nike

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

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/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com