C# 按非常特定的非字母顺序对数据集行进行排序

C# 按非常特定的非字母顺序对数据集行进行排序,c#,vb.net,linq,dataset,C#,Vb.net,Linq,Dataset,因此,我有一个简单的数据集,它的tableBatchSummary如下所示: 我想按非常具体的顺序对表中的行进行排序。该表始终有5行,描述值始终如下所示(示例): 安娜 坦率的 账单 马可 大卫 我希望数据集按以下非常具体的顺序进行排序: 马可 账单 大卫 安娜 坦率的 我尝试像这样使用DataTable的DefaultView属性来实现 dataSet.BatchSummary.DefaultView.Item(0).DataView.Sort = "Marco, Bill, Dav

因此,我有一个简单的数据集,它的table
BatchSummary
如下所示:

我想按非常具体的顺序对表中的行进行排序。该表始终有5行,描述值始终如下所示(示例):

  • 安娜
  • 坦率的
  • 账单
  • 马可
  • 大卫
我希望数据集按以下非常具体的顺序进行排序:

  • 马可
  • 账单
  • 大卫
  • 安娜
  • 坦率的
我尝试像这样使用DataTable的DefaultView属性来实现

dataSet.BatchSummary.DefaultView.Item(0).DataView.Sort = "Marco, Bill, David, Anna, Frank"
但是我得到了一个
系统。IndexOutOfRangeException

如何对此进行排序?

不支持此操作,它需要一列

我会使用
Linq To DataTable
,它更强大:

var descriptionOrder = new List<string>{ "Marco", "Bill", "David", "Anna", "Frank" };

var orderedBatchSummary = dataSet.BatchSummary.AsEnumerable()
    .OrderBy(batch => descriptionOrder.IndexOf(batch.Description))
    .ToArray();
var descriptionOrder=新列表{“马可”、“比尔”、“大卫”、“安娜”、“弗兰克”};
var orderedBatchSummary=dataSet.BatchSummary.AsEnumerable()
.OrderBy(batch=>descriptionOrder.IndexOf(batch.Description))
.ToArray();
不支持此操作,它需要一列

我会使用
Linq To DataTable
,它更强大:

var descriptionOrder = new List<string>{ "Marco", "Bill", "David", "Anna", "Frank" };

var orderedBatchSummary = dataSet.BatchSummary.AsEnumerable()
    .OrderBy(batch => descriptionOrder.IndexOf(batch.Description))
    .ToArray();
var descriptionOrder=新列表{“马可”、“比尔”、“大卫”、“安娜”、“弗兰克”};
var orderedBatchSummary=dataSet.BatchSummary.AsEnumerable()
.OrderBy(batch=>descriptionOrder.IndexOf(batch.Description))
.ToArray();

DataView.Sort()
,不是一组值。我通过向数据库表中添加一个名为DisplayOrder的字段来实现这一点。我据此编号。然后我在Select语句中添加了ORDERBY子句。。。按显示顺序排序。
DataView.Sort()
,不是一组值。我通过向数据库表中添加一个名为DisplayOrder的字段来完成此操作。我据此编号。然后我在Select语句中添加了ORDERBY子句。。。按显示顺序排序。如果datatable是数据绑定的呢?这个代码甚至可以工作吗?@zackraiyan:什么是数据绑定?
数据集
/
数据表
是一个内存中的集合,例如通过DataAdapter填充。如果要按顺序填充,则必须使用纯sql(如果源是数据库)。但是OP没有显示任何关于数据源的信息。他只是想订购一个现有的数据集。如果datatable是数据绑定的呢?这个代码甚至可以工作吗?@zackraiyan:什么是数据绑定?
数据集
/
数据表
是一个内存中的集合,例如通过DataAdapter填充。如果要按顺序填充,则必须使用纯sql(如果源是数据库)。但是OP没有显示任何关于数据源的信息。他只是想订购一个现有的数据集。