C# C如何用IQueryable定义匿名类型?
根据开关/情况,变量设置为EF链接。 但是我不知道如何定义变量groupbyleaddquery 在代码的后面,我将根据变量是否为null来处理结果C# C如何用IQueryable定义匿名类型?,c#,asp.net-core,C#,Asp.net Core,根据开关/情况,变量设置为EF链接。 但是我不知道如何定义变量groupbyleaddquery 在代码的后面,我将根据变量是否为null来处理结果 if (groupByLeadIdQuery2 != null) { var list = groupByLeadIdQuery2.ToList(); <<<<<<<<<<<<<<<<<< ... } 编译器抱怨:IQuer
if (groupByLeadIdQuery2 != null)
{
var list = groupByLeadIdQuery2.ToList(); <<<<<<<<<<<<<<<<<<
...
}
编译器抱怨:IQueryable不包含ToList的定义
我试过了
IQueryable<T> groupByLeadIdQuery = null;
IQueryable<Anonymous> groupByLeadIdQuery = null;
IQueryable<'a> groupByLeadIdQuery = null;
var groupByLeadIdQuery = null;
什么都不管用
你能告诉我这件事吗
感谢您的帮助使用ToList方法,您应该将IQueryable变量定义为List。例如IQueryable或类似的东西。如果没有特定的类型,您可以只使用var并获取您的匿名类型 在您的情况下,我认为最简单的解决方案是设置一个默认值,而不是按案例更新。但在这种情况下,必须为每个案例设置相同的匿名类型,否则必须强制转换类型
var groupByLeadIdQuery = context.HistoryRecords.GroupBy(h => h.ProductId)
.Select(g => new
{
Id = g.Key,
Retributions = g.Sum(s => s.Retribution),
});
switch (...)
{
case ...:
{
groupByLeadIdQuery = ...;
}
break;
case ...:
{
groupByLeadIdQuery = null;
}
...
}
如果这不能解决您的问题,您应该使用接口,一个包含您需要的属性的接口,或者可能是动态接口。切换表达式可能是一个很好的选择。基本问题是您需要in-IQueryable,但它是不可命名的,因此您只能使用var来声明,但是: var query=任何开关{ SomeCase=>your.Query.Here。。。, _=>空, }; 请注意,虽然您可以根据需要使用任意多的案例行,但它们必须具有相同的形状才能正常工作。您可以使用以下方法创建generic Group By method:
public async Task<List<T>> GetGroupByResult<T>(string groupByItem) where T : class
{
var groupByLeadIdQuery = _dbContext.Set<T>();
switch (groupByItem)
{
case "ProductId":
{
groupByLeadIdQuery = groupByLeadIdQuery.GroupBy(h => h.ProductId)
.Select(g => new
{
Id = g.Key,
Retributions = g.Sum(s => s.Retribution),
});
break;
}
case "Other":
{
groupByLeadIdQuery = ...;
break;
}
default:
{
groupByLeadIdQuery = null;
}
}
if (groupByLeadIdQuery != null)
return await groupByLeadIdQuery.ToListAsync();
return default;
}
它可以用于您的任何实体。来自King
groupByLeadIdQuery2.Cast<dynamic>().ToList()
就像一个符咒一样工作我们不能使用匿名类型?我不能像在代码中那样使用var,因为变量的外部作用域更大。你可以像我在代码中那样使用匿名类型。变量定义的作用域应高于或等于重新分配变量的作用域。简单的方法如GroupByReadyQuery2.Cast.ToList或GroupByReadyQuery2.Cast.ToList,也可以为临时结果声明显式类型。没有必要涉及匿名类型创建。哦,是的,很好,它工作得很好,谢谢
groupByLeadIdQuery2.Cast<dynamic>().ToList()