C# 如何在Linq查询中为多个列忽略group by中的大小写
请在下面找到为获取数据而编写的示例查询,我希望通过忽略单词的大小写来对GroupName进行分组 我知道以下选项,不想使用这些提供特定输出格式的选项。寻找保留原来的情况 1.降低 2.TO Lower将使用小写或大写C# 如何在Linq查询中为多个列忽略group by中的大小写,c#,linq,C#,Linq,请在下面找到为获取数据而编写的示例查询,我希望通过忽略单词的大小写来对GroupName进行分组 我知道以下选项,不想使用这些提供特定输出格式的选项。寻找保留原来的情况 1.降低 2.TO Lower将使用小写或大写 var GroupName = (from p in FilterList where p.GroupName != null group p by new { month = p.ReportedDateTime
var GroupName = (from p in FilterList
where p.GroupName != null
group p by new { month = p.ReportedDateTime.Month, year = p.ReportedDateTime.Year, GroupName =p.GroupName } into d
select new
{
dt = string.Format("{0}/{1}", d.Key.month, d.Key.year),
month = d.Key.month,
monthName = new DateTime(d.Key.year, d.Key.month, 1).ToString("MMM", CultureInfo.InvariantCulture),
count = d.Count(),
GroupName = d.Key.GroupName
}).OrderByDescending(g => g.count)
.ThenBy(g => g.GroupName).Take(20);
如何在上面的GroupName列查询中使用StringComparer.InvariantCultureIgnoreCase。您可以在分组键上使用ToLower并从组成员之一检索原始案例。这与所有组成员的原始情况不同,但这意味着希望组忽略情况,而不是将所有组成员保留在答案中
var GroupName = (from p in FilterList
where p.GroupName != null
group p by new { month = p.ReportedDateTime.Month, year = p.ReportedDateTime.Year, GroupName = p.GroupName.ToLower() } into d
select new {
dt = string.Format("{0}/{1}", d.Key.month, d.Key.year),
month = d.Key.month,
monthName = new DateTime(d.Key.year, d.Key.month, 1).ToString("MMM", CultureInfo.InvariantCulture),
count = d.Count(),
GroupName = d.First().GroupName
}).OrderByDescending(g => g.count)
.ThenBy(g => g.GroupName).Take(20);
字符串上的=运算符始终区分大小写。你试过使用String.Equals函数吗?它确实有一个比较器对象的重载?Nostromo,我实际上是在寻找对字符串的分组,因此Equals不会进行训练,那么Byg=>g.GroupName.ToLowerpm100怎么样,我不想使用ToLower,因为我的完整输出将以小写形式显示,我还想保留输入数据的大小写。按ToLower分组会将键减少为小写,但对于每个iGroup,First.GroupName仍将保留原始大小写。太好了,这在某些情况下有效,但在某些情况下不起作用。请解释这些情况,或者问另一个问题?Netmage-我在某个情况下做错了什么,现在所有情况下都有效。谢谢