関連するエンティティをグループ化してフィルタリングするLINQクエリの作成に役立つ必要があります。LINQ EFグループ化と例外を含む
ここは私のモデルクラスです。
public class Application
{
[DisplayName("Application")]
public int ApplicationId { get; set; }
[DisplayName("Application")]
public string Name { get; set; }
public List<DashboardEntry> DashboardEntries { get; set; }
}
public class Cluster
{
[DisplayName("Cluster")]
public int ClusterId { get; set; }
[DisplayName("Cluster")]
public string Name { get; set; }
}
[Bind(Exclude = "AlbumId")]
public class DashboardEntry
{
[ScaffoldColumn(false)]
public int DashboardEntryId { get; set; }
public int ClusterId { get; set; }
public int ApplicationId { get; set; }
public HealthStatusIndicator Status { get; set; }
public string Incident { get; set; }
public string Remarks { get; set; }
public virtual Cluster Cluster { get; set; }
public virtual Application Application { get; set; }
}
鑑み
public ActionResult Index()
{
//var dashboardEntries = db.DashboardEntries.Include(d => d.Application).Include(d => d.Cluster);
var dashboardEntries = db.DashboardEntries
.Include(d => d.Application)
.Include(d => d.Cluster)
.GroupBy(d => d.Application);
return View(dashboardEntries.ToList());
}
を次のようにインデックスアクションメソッドは、モデル宣言は以下の通りです。
@model IEnumerable<HealthCheckIndex.Models.DashboardEntry>
私はエラーに
辞書に渡されたモデルアイテムのタイプがある 「System.Data.Entity.Infrastructure.DbQuery1 [System.Linq.IGrouping2 [HealthCheckIndex.Modelsを取得しています.Application、HealthCheckIndex.Models.DashboardEntry]] '、 この辞書には、 ' System.Collections.Generic.IEnumerable`1 [HealthCheckIndex.Models.DashboardEntry] 'というモデル項目が必要です。
モデルの宣言を以下のように変更すると、Cluster
にアクセスできないという別のエラーが発生します。
@modelのIEnumerable>
私はグループに異なるアプリケーションへのダッシュボードのエントリをしたいし、各グループからの最大のダッシュボードのエントリを選択してグループをフィルタリング。
を返すリストと一致するビューの変更モデル定義。コントローラが作成してビューに渡すナビゲーションプロパティのないデータを含むViewModelを作成する –
アドバイスをいただきありがとうございます。私は最終的にこのアプローチに変わりますが、今私の目標は、アプリケーションを起動して実行することです。 SelectMany(c => c)は今のところ選択します – kunaguvarun