OrderBy使用StringComparison的字典列表

时间:2017-11-10 02:22:11

标签: c# linq

所以我有一个实现,其中字典列表按照他们的密钥进行排序。

List<Dictionary<string, object>> queue = new List<Dictionary<string, object>>();
queue = queue.OrderBy(x => x[sortField]).ThenBy(x => x["WorkflowID"]).ToList();

现在,我正在尝试在StringComparison.IgnoreOrdinalCase之后添加[sortField],但我收到的错误是它有一些无效的参数。

是否真的不可能将StringComparison与词典进行比较?

谢谢!

2 个答案:

答案 0 :(得分:2)

这与字典无关,您正在调用常规的OrderBy LINQ方法。它碰巧在字典上。

我假设你试过这个:

queue.OrderBy(x => x[sortField], StringComparer.OrdinalIgnoreCase)

收到错误,因为x[sortField]会返回对象,而不是字符串。因此,IComparer<string>object无效。

如果您确定&#39; sortField&#39;将始终指向一个字符串值,然后简单地转换值:

queue.OrderBy(x => (string)x[sortField], StringComparer.OrdinalIgnoreCase)

答案 1 :(得分:1)

StringComparison是针对String上某些方法的枚举。通用LINQ方法无法在该枚举上运行。

您应该使用StringComparer类,它使用LINQ可以接受的相同名称公开IComparer<string>个实例。