Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有动态Order By-多个字段的LINQ查询_C#_Linq_Sorting - Fatal编程技术网

C# 具有动态Order By-多个字段的LINQ查询

C# 具有动态Order By-多个字段的LINQ查询,c#,linq,sorting,C#,Linq,Sorting,我有一个以名称、日期、类别为参数的集合。我想根据动态变化的三个输入顺序对列表进行排序。 例如:在一种情况下,我必须分别按订单日期、名称和类别进行排序。 在另一种情况下,顺序是名称、日期和类别。因此我可以拥有所有排列和组合。有人能帮我一个通用的方法来实现它吗。我在这里还发现了一些他可能喜欢的东西:LINQ已经允许您通过在OrderBy之后添加、或函数来使用多个字段进行排序 检查类似的问题和讨论 另一方面,如果您需要Enumerable没有提供的稀有方法,您可以通过调用将Enumerable转换为Q

我有一个以名称、日期、类别为参数的集合。我想根据动态变化的三个输入顺序对列表进行排序。 例如:在一种情况下,我必须分别按订单日期、名称和类别进行排序。
在另一种情况下,顺序是名称、日期和类别。因此我可以拥有所有排列和组合。有人能帮我一个通用的方法来实现它吗。

我在这里还发现了一些他可能喜欢的东西:LINQ已经允许您通过在OrderBy之后添加、或函数来使用多个字段进行排序

检查类似的问题和讨论

另一方面,如果您需要Enumerable没有提供的稀有方法,您可以通过调用将Enumerable转换为Queryable

下面是一个例子

// Just to get IOrderedEnumerable from the collection
// And set the default order
var orderedItems = context.Items.OrderBy(i => i.Name);

var orderByString = txtOrderBy.Text.ToLower();
switch(orderByString)
{
    case "category":
        orderedItems = orderedItems.OrderBy(i => i.Category);
        break;
    case "date":
        orderedItems = orderedItems.OrderBy(i => i.Date);
        break;
    default:
        break;
}

LINQ的可能副本使用ThenBy函数提供了这种开箱即用的功能,不需要使用动态LINQ或任何东西。我知道LINQ有orderby和ThenBy函数。但这里的问题是,由于字段的顺序是动态的,如何传递字段并相应地排列它们?该方法是在列表中实现的,而不是IQueryable。因此只能在.ToList()之后使用,或者换句话说,在加载数据之后使用。这不是按一组字段排序,而是按最后一个OrderBy字段计数。我知道LinQ有OrderBy和thenby函数。但这里的问题是,由于字段的顺序是动态的,我如何传递字段并相应地排列它们呢?您不需要传递任何内容,只需根据要排序的字段使用适当的lambda调用ThenBy即可。即使是一个简单的switch语句也可以。或者,您可以使用要排序的lambda创建一个数组/列表,并逐个应用它们。lambda只是alli之后的另一种类型的变量,我不确定您是否正确理解了我,或者我没有理解它……您能给我一个示例代码吗?根据您对第一个字段的解决方案,我需要提供orderby。剩下的时间到了吗?那么,如何动态地使之成为可能呢?