したがって、claims
とそのobservations
のリストを返す次のメソッド(動作)があります。 1つのクレームは、ゼロまたは多数の観測値を持つことができます。コードは機能しますが、私は匿名のタイプで混乱してしまい、それを新しいクレームタイプに解析してカウントを設定します。親オブジェクトとその子カウントを匿名型なしで取得する
public async Task<IEnumerable<Claim>> GetClaims(ClaimStatusCode status, int take = 10, int skip = 0)
{
using (var db = new DataContext())
{
var pendingclaims = await (from claim in db.Claims
where claim.OfficeCode == _officeCode
where claim.ClaimStatusCode == status
select new
{
ID = claim.ID,
ClaimStatusCode = claim.ClaimStatusCode,
OpenDate = claim.OpenDate,
LastUpdateDate = claim.LastUpdateDate,
CloseDate = claim.CloseDate,
ProductCode = claim.ProductCode,
IssueCode = claim.IssueCode,
SpecificIssueCode = claim.SpecificIssueCode,
OfficeCode = claim.OfficeCode,
Summary = claim.Summary,
ObservationsCount = claim.Observations.Count
}).OrderBy(c => c.OpenDate).Take(take).Skip(skip).ToListAsync();
var list = new List<Claim>();
foreach (var claim in pendingclaims)
{
Claim c = new Claim()
{
ID = claim.ID,
ClaimStatusCode = claim.ClaimStatusCode,
OpenDate = claim.OpenDate,
LastUpdateDate = claim.LastUpdateDate,
CloseDate = claim.CloseDate,
ProductCode = claim.ProductCode,
IssueCode = claim.IssueCode,
SpecificIssueCode = claim.SpecificIssueCode,
OfficeCode = claim.OfficeCode,
Summary = claim.Summary,
ObservationsCount = claim.ObservationsCount
};
list.Add(c);
}
return list;
}
}
私は多分、私は結果のSQLクエリの混乱を減らすために何かが欠けていると思うが、何を理解していません。何か案が?
UPDATE要求されたよう
は、ここで私は多くの関係に無地のシンプルなエンティティコード最初のものを使用しています、クレームと観測クラスです:
請求
public class Claim
{
public Claim()
{
Observations = new List<Observation>();
}
[Key]
public Guid ID { get; set; }
...
public virtual ICollection<Observation> Observations { get; set; }
[NotMapped]
public int ObservationsCount { get; set; }
}
観察
public class Observation
{
public Observation()
{ }
[Key]
public Guid ID { get; set; }
...
public virtual Guid ClaimID { get; set; }
[ForeignKey("ClaimID")]
public virtual Claim Claim { get; set; }
}
確かに、観測テーブルはかなり複雑で高価です。私は各クレームのObservationデータをselectとIncludeで読み込むことはできません。 –
前のコメント作成者の方:EFではエンティティタイプへの投影が許可されていないため、この致命的な制限を回避するために中間の匿名投影が使用されています。 –
@RandolfRincónFadul 'Claim'クラスを表示できますか?あなたはそのクラスのすべてのフィールドを選択したのだろうか?そして、ObservationsCountはマップされていないプロパティだと思いますか? –