0
複数のモデルオブジェクトを単一のDTOにマップする方法を尋ねます。次のようにEntity Framework複数のモデルを単一のDTOに投影する
私は、次のEFモデルを持っている:
Bracket.cs
namespace MyApp.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Bracket")]
public partial class Bracket
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Bracket()
{
Teams = new HashSet<Team>();
}
public int BracketId { get; set; }
[Required]
[StringLength(50)]
public string BracketName { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Team> Teams { get; set; }
}
}
Team.cs
namespace MyApp.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
[Table("Team")]
public partial class Team
{
public int TeamId { get; set; }
[Required]
[StringLength(50)]
public string TeamName { get; set; }
public int BracketId { get; set; }
public virtual Bracket Bracket { get; set; }
}
}
そして私はDTOは、それらを表現するオブジェクトを作成しました。私は、データベースを照会するために使用し、得られたデータを投影し、私のクラスの一つで
namespace MyApp.Models
{
public class BracketDto
{
public int BracketId { get; set; }
public string BracketName { get; set; }
public List<TeamDto> Teams { get; set; }
}
public class TeamDto
{
public int TeamId { get; set; }
public string TeamName { get; set; }
public int BracketId { get; set; }
}
}
、これは私がやっているものです:
私は結果取得していますpublic List<BracketDto> GetBrackets()
{
var brackets = (from a in this.Context.Brackets
join b in this.Context.Teams on a.BracketId equals b.BracketId
select new BracketDto()
{
BracketId = a.BracketId,
BracketName = a.BracketName
}).ToList<BracketDto>();
var teams = (from a in this.Context.Teams
select new TeamDto()
{
TeamId = a.TeamId,
TeamName = a.TeamName,
BracketId = a.BracketId
}).ToList<TeamDto>();
foreach(BracketDto bracket in brackets)
{
var tl = teams.Where(a => a.BracketId == bracket.BracketId).ToList();
bracket.Teams = tl;
}
var xtra = (from a in this.Context.Brackets
join b in this.Context.Teams on a.BracketId equals b.BracketId
select new BracketDto()
{
BracketId = a.BracketId,
BracketName = a.BracketName
}).ToList<BracketDto>();
return brackets;
}
:
[
{
"BracketId": 1,
"BracketName": "Eastern Conference",
"Teams": [
{
"TeamId": 1,
"TeamName": "Indiana Pacers",
"BracketId": 1
},
{
"TeamId": 3,
"TeamName": "Cleveland Cavaliers",
"BracketId": 1
}
]
},
{
"BracketId": 2,
"BracketName": "Western Conference",
"Teams": [
{
"TeamId": 2,
"TeamName": "Los Angeles Lakers",
"BracketId": 2
},
{
"TeamId": 4,
"TeamName": "Los Angeles Clippers",
"BracketId": 2
}
]
}
]
を
私はこれを行うより効率的な方法があるかもしれないことを知っています。しかし、私が持っているLINQのクエリでそれをどうやって行うのかは確信が持てません。
アドバイスと提案をお探しですか?ありがとうございました!