c# - 如何制作匿名公共异步任务
问题描述
我有一个方法可以将对象作为列表返回。下线后,我意识到我必须加入几张桌子才能获得结果。问题出现在我的退货声明中,该声明指出:
无法将类型 System.Collections.Generic.List<> 隐式转换为 System.Collections.Generic.List<>。
如何修复我的代码以便返回我的连接结果?这是我的代码:
public async Task<List<McaMswcomapnionAuditCardPinrecords>> SearchPinRecords(string Region, [FromQuery] PaginationDTO pagination)
{
var queryable = (from pinRecords in context.McaMswcomapnionAuditCardPinrecords
join transitRecords in context.AbmProdRegionTransitRecordsNew on pinRecords.TransitRecordId equals transitRecords.Id
join transitDescription in context.CommonTransitRecords on transitRecords.TransitRecordId equals transitDescription.Id
where pinRecords.RegionRecordId == Region && pinRecords.AuditComplete == false
select new
{
}
);
await HttpContextExtensions.GetPage<McaMswcomapnionAuditCardPinrecords>(queryable, pagination.Page, pagination.QuantityPerPage);
return await queryable.Paginate(pagination).ToListAsync();
}
解决方案
匿名类型文档中的备注部分说:
匿名类型是直接从 object 派生的类类型,并且不能转换为除 object 之外的任何类型。编译器为每个匿名类型提供了一个名称,尽管您的应用程序无法访问它。
这告诉我们两件事:
- 编译器正在根据您定义匿名类型的方式为您创建一个类。因此,您不会通过自己创建类来节省任何处理时间或内存。和,
- 您无法访问匿名类的自动生成名称,因此您无法定义返回该类型的方法。(你可以投到
object
并返回List<object>
,但这只会让事情变得更加困难)
解决方案是自己创建一个具有您打算返回的所有属性的命名类,然后返回该类型。
public class RecordWithDescription {
public int TransitRecordId { get; set;}
public string Description { get; set;}
// etc.
}
public async Task<List<RecordWithDescription>> SearchPinRecords(string Region, [FromQuery] PaginationDTO pagination)
{
var queryable = (from pinRecords in context.McaMswcomapnionAuditCardPinrecords
join transitRecords in context.AbmProdRegionTransitRecordsNew on pinRecords.TransitRecordId equals transitRecords.Id
join transitDescription in context.CommonTransitRecords on transitRecords.TransitRecordId equals transitDescription.Id
where pinRecords.RegionRecordId == Region && pinRecords.AuditComplete == false
select new RecordWithDescription
{
TransitRecordId = pinRecords.TransitRecordId,
Description = transitDescription.Description,
// etc.
}
);
await HttpContextExtensions.GetPage<McaMswcomapnionAuditCardPinrecords>(queryable, pagination.Page, pagination.QuantityPerPage);
return await queryable.Paginate(pagination).ToListAsync();
}
(我没有测试这段代码,所以你可能需要调整它,但它给了你这个想法)
推荐阅读
- python - 删除反斜杠并保留标点符号
- java - 如何在 Windows 上通过文件关联运行 .sh 并从 Java 获取返回值
- android - Firebase firestore 空文档路径
- vb.net - 为什么我的组合框在被选中后不显示数据
- python - 如何将“男”或“女”改为“他”或“她”?
- java - 为什么不能在类外使用 lambda 表达式来实现函数式接口?
- ubuntu - 安装 anaconda 后如何从终端移除底座
- typescript - 根据类型参数推断 Typescript 函数返回类型
- rest - 如何防止 SQL 注入并提高 REST API 的安全性?
- r - 如何使用 spark.lapply() 从用 R 编写的函数返回局部变量值