c# - C#如何用IQueryable定义一个匿名类型?
问题描述
根据开关/情况,变量设置为 EF 链接。但我不知道如何定义变量groupByLeadIdQuery
IQueryable groupByLeadIdQuery = null;
switch (...)
{
case ...:
{
groupByLeadIdQuery = context.HistoryRecords.GroupBy(h => h.ProductId)
.Select(g => new
{
Id = g.Key,
Retributions = g.Sum(s => s.Retribution),
});
}
break;
case ...:
{
groupByLeadIdQuery = null;
}
...
}
在代码的后面,我根据变量是否为空来处理结果
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<Product>
或类似的东西。如果没有特定类型,您可以只使用 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;
}
...
}
如果这不能解决您的问题,您应该使用接口,一个包含您需要的属性的接口,或者可能是动态。
推荐阅读
- c++ - CRTP 派生的模板化方法调用在“>”标记之前产生预期的主表达式
- reactjs - 在不会渲染的类中使用 Hooks
- spring - 收到来自 SMTP 主机的错误问候:smtp.yandex.ru,端口:465,响应:[EOF]] 根本原因是 Yandex
- c# - c#.net 应用程序中长时间运行的函数执行
- deep-learning - Pytorch 中深度神经网络的输出
- django - 如何使用views.py中的Django forms.ModelForm一次更新多行
- arrays - getRange of null 错误在以前工作的代码上
- javascript - Axios 为 ETIMEDOUT 创建更短的持续时间
- javascript - 如何使用 mongoose findByIdAndUpdate 更新嵌套数据
- flutter - 如果我离线,如何下载颤振包以使用它?