C# 如何创建匿名公共异步任务
我有一个方法,可以将对象作为列表返回。后来,我意识到我必须加入几个表格才能得到结果。问题出现在我的返回语句中,该语句声明: 无法将类型System.Collections.Generic.List隐式转换为System.Collections.Generic.List 如何修复代码,以便返回关联结果?这是我的密码:C# 如何创建匿名公共异步任务,c#,entity-framework,C#,Entity Framework,我有一个方法,可以将对象作为列表返回。后来,我意识到我必须加入几个表格才能得到结果。问题出现在我的返回语句中,该语句声明: 无法将类型System.Collections.Generic.List隐式转换为System.Collections.Generic.List 如何修复代码,以便返回关联结果?这是我的密码: public async Task<List<McaMswcomapnionAuditCardPinrecords>> SearchPinRecords(st
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();
}
报告说:
匿名类型是直接从对象派生的类类型,不能转换为除对象之外的任何类型。编译器为每个匿名类型提供一个名称,尽管您的应用程序无法访问它
这告诉我们两件事:
编译器正在根据您定义匿名类型的方式为您创建一个类。因此,不自己创建类不会节省任何处理时间或内存。和
无法访问自动生成的匿名类名称,因此无法定义返回该类型的方法。您可以强制转换到对象并返回列表,但这只会使事情变得更加困难
解决方案是自己创建一个命名类,包含所有要返回的属性,然后返回该类型
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();
}