如何从LINQ查询返回匿名类型的对象(或对象列表)到C#中的UI(控制台应用程序)?

时间:2018-12-29 13:36:49

标签: c# entity-framework linq

让我们说我使用联接和groupbys使用LINQ查询多个表,结果产生了IQueryable<'a>个匿名对象,我想将其传递给UI层。我该如何处理?

如果方法的返回类型是简单的非泛型IQueryable<'a>,则可以返回IQueryable(匿名类型的IQueryable)。但是,如何使用此非通用IQueryable对象,如何访问包含的匿名对象的属性?

2 个答案:

答案 0 :(得分:0)

您不能那样做。您将需要为其创建具有所需属性的DTO。

public class DTO
{
    public int PropA { get; set; }
    .......
    .......
}

,然后将查询具体化到DTO中:

public List<DTO> GetData()
{
    return query.Select(x= > new DTO() 
                 {
                   PropA = x.SomeColumn,
                   ...........
                   ...........
                 }).ToList();
}

希望有帮助。

答案 1 :(得分:0)

您可以使用值元组,因此返回一个新的值元组,如下所示:

<button mat-icon-button [matMenuTriggerFor]="menu" 
        #menuTrigger="matMenuTrigger">
    <mat-icon>more_vert</mat-icon>
</button>
<mat-menu #menu="matMenu" xPosition="before">
  <span (mouseleave)="menuTrigger.closeMenu()">
    <div *ngFor="let f of funcList">
      <button (click)="this.trigger.emit({object: this.object, code: f.code})" 
               [routerLink]="f.router_link" 
               mat-menu-item>
            <mat-icon>{{f.icon}}</mat-icon>
            <span>{{f.label}}</span>
     </button>
    </div>
  </span>
</mat-menu>

然后,您将获得一个通用数组,其结果为值元组,并且可以使用给定的属性名称访问这些值,例如:

public (string Name, int Age, DateTimeOffset Timestamp)[] GetValues()
{
    return database.Where(x => ...)
        .Select(x => (Name: x.Name, Age: x.Age, Timestamp: DateTimeOffset.Now))
        .ToArray();
}

通过这种方式,您不必定义自定义类型即可获得灵活性