C# 如何创建匿名公共异步任务

C# 如何创建匿名公共异步任务,c#,entity-framework,C#,Entity Framework,我有一个方法,可以将对象作为列表返回。后来,我意识到我必须加入几个表格才能得到结果。问题出现在我的返回语句中,该语句声明: 无法将类型System.Collections.Generic.List隐式转换为System.Collections.Generic.List 如何修复代码,以便返回关联结果?这是我的密码: public async Task<List<McaMswcomapnionAuditCardPinrecords>> SearchPinRecords(st

我有一个方法,可以将对象作为列表返回。后来,我意识到我必须加入几个表格才能得到结果。问题出现在我的返回语句中,该语句声明:

无法将类型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();
}
报告说:

匿名类型是直接从对象派生的类类型,不能转换为除对象之外的任何类型。编译器为每个匿名类型提供一个名称,尽管您的应用程序无法访问它

这告诉我们两件事:

编译器正在根据您定义匿名类型的方式为您创建一个类。因此,不自己创建类不会节省任何处理时间或内存。和 无法访问自动生成的匿名类名称,因此无法定义返回该类型的方法。您可以强制转换到对象并返回列表,但这只会使事情变得更加困难 解决方案是自己创建一个命名类,包含所有要返回的属性,然后返回该类型

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();
}