让我们说我使用联接和groupbys使用LINQ查询多个表,结果产生了IQueryable<'a>
个匿名对象,我想将其传递给UI层。我该如何处理?
如果方法的返回类型是简单的非泛型IQueryable<'a>
,则可以返回IQueryable
(匿名类型的IQueryable)。但是,如何使用此非通用IQueryable
对象,如何访问包含的匿名对象的属性?
答案 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();
}
通过这种方式,您不必定义自定义类型即可获得灵活性