Linq 当查询调用AsEnumerable时,如何使oData不区分大小写?

Linq 当查询调用AsEnumerable时,如何使oData不区分大小写?,linq,.net-core,asp.net-core-3.1,Linq,.net Core,Asp.net Core 3.1,由于.NETCore3,如果不先调用numerable或ToList,我们就不能再使用GroupBy 调用AsEnumerable的问题在于它使oData查询区分大小写。此带有“aaaa”的筛选器找不到“A”,例如: https://localhost/myweb.api/api/mymethod?$filter=contains(名称,%20%27aaaa%27) 如何再次使此不区分大小写 这不是生产代码,只是一个示例: public IQueryable<Dto> GetDto(

由于.NETCore3,如果不先调用numerable或ToList,我们就不能再使用GroupBy

调用AsEnumerable的问题在于它使oData查询区分大小写。此带有“aaaa”的筛选器找不到“A”,例如:

https://localhost/myweb.api/api/mymethod?$filter=contains(名称,%20%27aaaa%27)

如何再次使此不区分大小写

这不是生产代码,只是一个示例:

public IQueryable<Dto> GetDto(
{
    return (from a in _context.Names
            select new Dto
            {
                Name = a.Name
            })
            .AsEnumerable() // this is needed for the group by to work
            .GroupBy(x => new { x.Name })
            .Select(x => new Dto
            {
                Name = x.Key.Name
            })
            .AsQueryable();
}
public IQueryable GetDto(
{
返回(从_context.Names中的
选择新Dto
{
姓名
})
.AsEnumerable()//这是group by工作所必需的
.GroupBy(x=>new{x.Name})
.选择(x=>新Dto
{
Name=x.Key.Name
})
.AsQueryable();
}

您可以通过生成.tolower()或.toUpper()来尝试相同的情况,并应用where条件来过滤记录:

var searchText = "A";
return (from a in _context.Names
            select new Dto
            {
                Name = a.Name
            })
        .Where(x=>x.Name.ToLower().Contains(searchText.ToLower()))
            .AsEnumerable() 
            .GroupBy(x => new { x.Name })
            .Select(x => new Dto
            {
                Name = x.Key.Name
            })
            .AsQueryable();

一个选项是降低输入和数据的输入。在这种情况下,输入和数据总是相同的,在AAAA中将找到A,因为它将被转换为A。为什么没有
AsEnumerable
,就不能调用
GroupBy
?您更愿意将整个表加载到内存中吗?1.如果您是按单个值分组,我们没有理由这样做e匿名对象,您只需执行
x=>x.Name
,然后执行
Name=g.Key
。2.添加
AsQueryable
通常没有任何价值。3.如果您只需要不同的名称,请使用
distinct
(从上下文中选择a.Name)。distinct()
@NetMage正如我所说,这只是一个示例代码。我正在通过多个参数进行分组。@SvyatoslavDanyliv,如果我删除AsEnumerable,我会出现此错误,因为.Net Core 3中有新的突破性更改:无法翻译LINQ表达式xxx。请以可以翻译的形式重写查询,或者切换到客户端evalu通过插入对“AsEnumerable”、“AsAsAsAsAsyncEnumerable”、“ToList”或“ToListSync”的调用来显式初始化。有关详细信息,请参阅。“是的,这在我的情况下不起作用,因为实际Dto除了“Name”之外还包含多个参数“您的DTO是select语句。您真正需要的是在where条件下,您需要使用UII中的参数检查哪些属性。我的意思是,我的最终DTO除了名称之外,还有更多属性。我不能使用where条件,因为每次调用都可以传递不同的参数:$filter=contains(图版,%20%27aaaa%27)或$filter=包含(玻璃,%20%27aaaa%27)