だからここに私はビューLINQクエリにビューからコードを移動
reportData = dbContext.FinancialsBySupplierAuditPeriodStatusType
.Where(v => v.ReviewPeriodID == reportFilter.ReviewPeriodID && v.StatusCategoryID == reportFilter.StatusCategoryID && v.ClientID == reportFilter.ClientId)
.GroupBy(s => new { s.SupplierID })
.Select(g => new DrilldownReportItem {
SupplierID = g.Key.SupplierID,
SupplierName = g.Max(v => v.SupplierName),
AccountNo = g.Max(v => v.AccountNo),
SuppTotals = g.Select(v => new TempTotals { ClaimType = v.TypeDesc ?? "Old Claims", Amount = v.Amount ?? 0 })
}).OrderBy(r => r.SupplierName).ToList();
SuppTotalsのためのデータを返すこのクエリは内ClaimTypesのそれぞれとIEnumerableを含んでいる問題は、あるしかしそうではないかもしれませんそのレコードに値がない場合はすべての単一のClaimTypeを含みます。したがって、ビューには5つの見出しがありますが、テーブル行には2つの結果しかありません。
たとえば、5つのClaimTypesがありますが、そのレコードには1つしかありません。この場合、ビューで見出しが一致し、データが空白になります。
は、私は私の質問は、私はこのコードを配置する必要がないように、これは、クエリ自体に範囲を追加組み込む方法がある。このvar existing = i.SuppTotals.Select(x => x.ClaimType);
var toAdd = Model.ClaimHeadings.Except(existing).Select(x => new TempTotals {
ClaimType = x,
Amount = 0
});
var row = i.SuppTotals.ToList();
row.AddRange(toAdd);
@foreach (var item in Model.ClaimHeadings) {
<td><span class="text">@String.Format("{0:C0}", row.Where(c => c.ClaimType == item).First().Amount)</span></td>
とビュー上で、この問題を修正しましたビューとクエリでそれを持っています。ここ
--Update--
は、請求項Typeエンティティpublic partial class ClaimType
{
[Key][Column(Order = 0)]
public int ClientID { get; set; }
[Key][Column(Order = 1)]
[StringLength(2)]
//WAS STRING
public string TypeID { get; set; }
[StringLength(50)]
public string TypeDesc { get; set; }
[StringLength(2)]
public char OldTypeID { get; set; }
}
であり、このコードは、レポートデータにしたものに追加して0の量と要求の種類のすべてを引っ張る
var claimTypes = _claimManager.GetClaimTypes(PredicateBuilder.True<ClaimType>().And(x => x.ClientID == reportFilter.ClientId)).Select(x => new TempTotals {
ClaimType = x.TypeDesc,
Amount = 0
});
あなたは「ClaimTypes」について語りかけています。彼らはどこから来たの?すなわち、あなたはいくつかのエンティティ(テーブル)を持っていますか? –
クレームの種類はテーブル内に保存されていますエンティティとクエリとそれらをプルするために使用するコードを使用して質問を更新しました –
これをWebページに表示しているので、 'ClaimTypes'を呼び出して返された値を確認してください –