数据表 - 在asp.net中使用Windcard的过滤器c#

时间:2016-09-13 11:35:56

标签: c# asp.net datatable dataview

我有数据表,其中包含如下数据我现在需要根据包含值5:4的列Role来存档行但是当我通过dataview rowfilter过滤时,我得到的值为75:4的行也是错误的是我试过的代码,任何人都可以帮助我使用dataview过滤特定值

enter image description here

datatabl; e如上所述

以下是我试图过滤的c#代码

DataView dv1 = new DataView(dt);
                dv1.RowFilter = "Role like'%5:4%'";
                dt1 = dv1.ToTable();

2 个答案:

答案 0 :(得分:2)

不要使用非常有限且过时的RowFilter但是Linq-To-DataTable:

var matchingRows = from row in dt.AsEnumerable()
                   let roles = row.Field<string>("Role").Split('/')
                   where roles.Contains("5:4") 
                   select row;

此方法首先按/拆分字符串,然后使用Contains在此数组中进行搜索。

如果您需要知道是否有匹配的行:

bool hasMatchingRows = matchingRows.Any();

如果你想用那些mathing行创建一个新的DataTable:

if( hasMatchingRows )
{
    DataTable tblMatches = matchingRows.CopyToDataTable();
}

如果您只想知道matching.rows的初始列:

List<string> initials = matchingRows.Select(r => r.Field<string>("Initial")).ToList();

在此示例中仅包含NMLGGRA

答案 1 :(得分:1)

替换

dv1.RowFilter = "Role like'%5:4%'";

dv1.RowFilter = "Role like '5:4/%' OR Role like '%/5:4' OR Role = '5:4' OR Role like '%/5:4/%'";
//                             ^                   ^                ^                    ^
//                        startswith            endswith         equals              contains
相关问题