Ano*_*oop 11 linq datatable group-by case-insensitive dataset
我有一个数据表,我想通过一列数据表(比如Column1string类型)执行不区分大小写的组.我观察到通常LINQ to DataSet执行区分大小写的比较.例如,如果Column1有两个字符串值"Test"和"test",则在应用group by它之后返回两个单独的行,其值为"Test"和"test",而不是一个.
查询是:
var countGroupQuery = from table in dataTable.AsEnumerable()
group table by table.Field<string>(Column1) into groupedTable
select new
{
value = groupedTable.Key,
count = groupedTable.Count()
};
Run Code Online (Sandbox Code Playgroud)
是否有任何方法来执行不区分大小写,group by以便在上面的示例中我只获得一行具有一个值("Test"或"test")?ToUpper或者ToLower实际上将值更改为大写或小写而不是使用至少一个输入值,所以我不想使用它:
group table by table.Field<string>(Column1).ToUpper() into groupedTable
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 22
您无法从查询表达式执行此操作,但可以使用点表示法执行此操作:
var query = dataTable.AsEnumerable()
.GroupBy(x => table.Field<string>(Column1),
StringComparer.InvariantCultureIgnoreCase)
.Select(groupedTable => new
{
value = groupedTable.Key,
count = groupedTable.Count()
});
Run Code Online (Sandbox Code Playgroud)
您甚至GroupBy可以在一次调用中使用更复杂的重载:
var query = dataTable.AsEnumerable()
.GroupBy(x => table.Field<string>(Column1),
(key, group) => { value = key,
count = group.Count() },
StringComparer.InvariantCultureIgnoreCase));
Run Code Online (Sandbox Code Playgroud)
显然,这是使用不变文化 - 你也可以使用当前的文化或序数规则.