繁体   English   中英

在C#中自定义选择DataTable列

[英]Custom select DataTable Columns in C#

我想选择以C#中给定字母开头的DataTable列。 我必须使用Sort Property来做到这一点。 我只发现了如何对它们进行升序或降序排序。

sort的结果应该等效于带有LIKE 'l%'的sql select语句, l作为参数给出。 我可以使用Substring提取第一个字母,但我该如何使用它? 谢谢。

DataView dv= employees.DefaultView;
dv.Sort="ColumnName asc";
employees = dv.ToTable();

PS:还发现了RowFilter属性,但我需要使用'Sort'。

对不起第一次不太清楚。

您可以使用LINQ-To-DataTable

employees = employees.AsEnumerable()
    .OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
    .CopyToDataTable();

请注意,您需要using System.Linq文件顶部的using System.Linq进行添加。

也许您发现查询语法更具可读性:

var rows = from row in employees.AsEnumerable()
           let value = row.Field<string>("ColumnName")
           orderby value.FirstOrDefault()
           select row;
employees = rows.CopyToDataTable();

更新“排序后,我只需要选择以给定字母开头的那些”

然后你可能想要过滤记录,因此使用Enumerable.Where

所以要么:

employees = employees.AsEnumerable()
    .Where(row => row.Field<string>("ColumnName").StartsWith("A", StringComparison.CurrentCultureIgnoreCase))
    .OrderBy(row => row.Field<string>("ColumnName").FirstOrDefault())
    .CopyToDataTable();

或(在查询语法中相同):

var rows = from row in employees.AsEnumerable()
           let value = row.Field<string>("ColumnName")
           where value.StartsWith("A", StringComparison.CurrentCultureIgnoreCase)) // for example
           orderby value.FirstOrDefault()
           select row;
employees = rows.CopyToDataTable();

但是,现在orderby非常没用,因为你想用第一个字母来命令记录,无论如何都要以相同的字母开头。

这里是我以前使用的旧DataTable选择和排序包装器。 现在我正在使用另一个将数据表转换为自定义对象的类,并且可以轻松使用linq。

public static class CTableManager
{
    public static DataTable Select(DataTable dt, string sFilter)
    {
        DataTable dtResult = dt.Clone();

        try
        {
            dtResult = dt.Select(sFilter).CopyToDataTable();
        }
        catch { }

        return dtResult;
    }

    public static DataTable Sort(DataTable dt, string sOrder)
    {
         DataTable dtResult = dt.Clone();

         try
         {
             dt.DefaultView.Sort = sOrder;

             dtResult = dt.DefaultView.ToTable().Copy();
         }
         catch { }

         return dtResult;
    }

     public static DataTable SelectAndSort(DataTable dt, string sFilter, string sOrder)
    {
        DataTable dtResult = dt.Copy();

        if (sFilter != string.Empty)
        {
            dtResult = Select(dtResult, sFilter);
        }

        if (sOrder != string.Empty)
        {
            dtResult = Sort(dtResult, sOrder);
        }

        return dtResult;
    }
}

用法:

SQL中过滤器的正常位置

var myResult = CTableManager.Select(dtSource,"itemDesc like '%plastic%' AND Price > 25.97");

再次排序SQL就像

 var myResult = CTableManager.Sort(dtSource,"Price DESC, Quantity ASC");

显然两者都有

var myResult = CTableManager.SelectAndSort(dtSource,"itemDesc like '%plastic%' AND Price > 25.97", "Price DESC, Quantity ASC");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM