asp.net 存储库内LINQ查询的返回值

mnemlml8  于 2023-01-03  发布在  .NET
关注(0)|答案(1)|浏览(135)

我在接口内部创建方法,如下所示List<T> OngoingEvent();
我实现了存储库内部的方法

public List<T> OngoingEvent()
{
    var output2 = DbContext.ParticipantsTable.Join(DbContext.EventTable, e => e.EventTableID, d => d.ID,
         (tbl1, tbl2) => new
         {
             Table1 = tbl1,
             Table2 = tbl2
         }).Join(DbContext.VolunteerTable, ee => ee.Table1.VolunteerTableID, dd => dd.ID,
         (tbl1, tbl2) => new
         {
             ID = tbl1.Table1.ID,
             IsAccepted = tbl1.Table1.IsAccepted,
             IsAttend = tbl1.Table1.IsAttend,
             EventName = tbl1.Table2.EventName,
             EventEndDate = tbl1.Table2.EventEndDate,
             VolunteerName = tbl2.VolunteerName
         }).ToList();

    return output2;

}

但返回值为Error
严重性代码说明项目文件行隐藏状态错误CS 0029无法隐式转换类型“System.Collections.Generic.List〈〈anonymous type:int Id、接受布尔值、布尔值Attend、字符串EventName、字符串EventEndDate、字符串志愿者名称〉〉' to '系统.集合.通用.列表'
我尝试将List<T> OngoingEvent();更改为IEnumerable OngoingEvent();'
和可查询的正在进行的事件();但不工作
我试着用这样的方法IQueryable OngoingEvent(表达式);但我不知道该怎么办

agyaoht7

agyaoht71#

该错误告诉您output2列表的返回类型是匿名对象,因为使用了:

new
{
    DynamicProp1Name = value1,
    DynamicProp2Name = value2,
    ... etc ...
}

无法转换为T类型的列表。
您可以通过将签名更改为以下任一项来快速解决问题:

public List<object> OngoingEvent();

public List<dynamic> OngoingEvent();

但是,我会定义一个表示返回类型的类:

public class OngoingEventResult
{
    public int ID { get; set; }
    public bool IsAccepted { get; set; }
    public bool IsAttend { get; set; }
    public string EventName { get; set; }
    public DateTime EventEndDate { get; set; }
    public string VolunteerName { get; set; }
}

然后使用这个作为返回类型:

public List<OngoingEventResult> OngoingEvent()
{
    ...
    (tbl1, tb2) => new OngoingEventResult()
    {
        ID = tbl1.Table1.ID,
        IsAccepted = tbl1.Table1.IsAccepted,
        IsAttend = tbl1.Table1.IsAttend,
        EventName = tbl1.Table2.EventName,
        EventEndDate = tbl1.Table2.EventEndDate,
        VolunteerName = tbl2.VolunteerName    
    }
    ...
}

相关问题