gpt4 book ai didi

c# - 使用字符串字段名称动态构建具有层次结构的 linq 查询?

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

我很难过.. 我需要一个简单的对象列表,几个字段名称数组作为字符串(分组依据,排序依据,以及选择),它们在运行时提供,并且以某种方式生成 LINQ 查询以返回用于 JSON 序列化的对象。

我在设置下方构建了一个示例重现。 OrderBy 非常简单,我只需使用 GetType().GetProperty() 找到正确的属性,并将 orderby 字段迭代到菊花链 .OrderBy 调用。这一切都在 GroupBy 上分崩离析,因为每个人都将结果包装在 IEnumerable>..

有什么好的方法吗?我在网上找到的所有内容都让人们求助于良好的旧递归过程代码。 LINQ 一定有办法做到这一点,但我迷路了。我尝试的所有内容甚至都无法编译,类型只是不匹配..

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Linq.Dynamic;

namespace linqtest2
{
class Program
{
static void Main(string[] args)
{
var products = new List<Product>
{
new Product("Food", "Fruit", "Apple"),
new Product("Food", "Fruit", "Banana"),
new Product("Food", "Fruit", "Orange"),
new Product("Food", "Vegetables", "Carrot"),
new Product("Food", "Vegetables", "Pea"),
new Product("Drink", "Soft Drink", "Orange Juice"),
new Product("Drink", "Soft Drink", "Lemonade"),
new Product("Drink", "Alcoholic", "Bitter"),
new Product("Drink", "Alcoholic", "Lager"),
new Product("Drink", "Alcoholic", "Vodka")
};

string[] select = new[] { "Category", "Name" };
string[] orderBy = new[] { "Name", "Category" };
string[] groupBy = new[] { "Category", "Subcategory" };
}
}

public class Product
{
public string Name { get; set; }
public string Category { get; set; }
public string Subcategory { get; set; }

public Product(string category, string subcategory, string name)
{
Category = category;
Subcategory = subcategory;
Name = name;
}
}
}

最佳答案

请检查Dynamic Linq库,它提供了一种使用字符串而不是 lambda 的方法。

使用动态 linq 你可以这样写:

products.OrderBy("Category").ThenBy("Name")

还有很多其他的可能性。

编辑:

将解决方案更新为更加动态

IQueryable<Product> query = products;
bool firstOrderBy = true;
foreach(var orderExpression in orderBy)
{
if (firstOrderBy)
{
query = query.OrderBy(orderExpression);
firstOrderBy = false;
}
else
{
query = query.ThenBy(orderExpression);
}
}

按照我的建议,验证库,探索它并根据您的需要进行调整。您还可以执行 GroupBySelect,请使用它。

另请检查@dkackman 提出的解决方案,看看哪个解决方案更适合您的需求,您需要做一些工作来适应您的需求。

关于c# - 使用字符串字段名称动态构建具有层次结构的 linq 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23621256/

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