【问题标题】:Filtering DataSet过滤数据集
【发布时间】:2011-08-25 20:35:55
【问题描述】:

我有一个充满客户的数据集。我想知道是否有任何方法可以过滤数据集并仅获取我想要的信息。例如,为拥有CostumerID = 1 的客户获取CostumerNameCostumerAddress

有可能吗?

【问题讨论】:

  • @Caspar Kleijne - 抱歉没看到。
  • 没问题我也经常发生,无论如何,你的答案在那篇文章中,希望你能得到帮助;)
  • 顾客是国际顾客协会的成员吗? costume.org

标签: c# dataset


【解决方案1】:

你可以使用DataTable.Select

var strExpr = "CostumerID = 1 AND OrderCount > 2";
var strSort = "OrderCount DESC";

// Use the Select method to find all rows matching the filter.
foundRows = ds.Table[0].Select(strExpr, strSort);  

或者你可以使用DataView

ds.Tables[0].DefaultView.RowFilter = strExpr;  

更新我不知道你为什么要返回一个数据集。但我会采用以下解决方案:

var dv = ds.Tables[0].DefaultView;
dv.RowFilter = strExpr;
var newDS = new DataSet();
var newDT = dv.ToTable();
newDS.Tables.Add(newDT);

【讨论】:

  • @Kamyar - 问题是我需要过滤结果为 DataSet 格式。我该怎么办?
  • @Erika:您可以使用dataview的ToTable方法将dataview转换为datatable。 var dv = ds.Tables[0].Defaultview; dv.RowFilter=...; var dt = dv.ToTable(); 为什么要它成为数据集?
  • @Kamyar - 客户希望它成为数据集:S,是否可以再次将其转换为 DataSet?
  • @Kamyar - 非常感谢。它工作得很好。我唯一想知道的是是否可以编辑过滤,以便只显示数据集中的两列而不是所有列。我只需要 CustomerName 和 CustomerAdress。如何过滤列?
【解决方案2】:

以上内容非常接近。这是我的解决方案:

Private Sub getDsClone(ByRef inClone As DataSet, ByVal matchStr As String, ByRef outClone As DataSet)
    Dim i As Integer

    outClone = inClone.Clone
    Dim dv As DataView = inClone.Tables(0).DefaultView
    dv.RowFilter = matchStr
    Dim dt As New DataTable
    dt = dv.ToTable
    For i = 0 To dv.Count - 1
        outClone.Tables(0).ImportRow(dv.Item(i).Row)
    Next
End Sub

【讨论】:

    【解决方案3】:

    没有提到合并?

    DataSet newdataset = new DataSet();
    
    newdataset.Merge( olddataset.Tables[0].Select( filterstring, sortstring ));
    

    【讨论】:

      猜你喜欢
      • 2019-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-12
      相关资源
      最近更新 更多