0

私はEFコードファーストを使用しています。現在、コントローラーのモデルにデータを取得してビューに表示するためのLINQの記述方法を理解するのに苦労しています。基本的に、私はHolterTestデータのフィードを受け取り、HolterTestを処理するために一連の特定のタスクを実行する人々のためのワークリストを作成し、タスクが完了したときにフラグを立て、場所のステータスを提供できるようにしようとしています。個々のテストはプロセス中です基本的なタスククラスは、プロセスのステップを追加または変更できるようにするためのものであり、displayOrderはタスクが実行される順序です。WorkTaskはタスクの特定のインスタンスであり、誰がいつ完了したかをマークできます。WorkItemは、HolterTest、WorkTasksのリスト、およびWorkTasksがすべて完了したときを含むステータス情報を含む複合型です。

モデルクラス:

public class HolterTest
{
    public Int32 HolterTestID { get; set; }
    public string PatientNumber { get; set; }
    public string LastName { get; set; }
    public DateTime RecordingStartDateTime { get; set; }
    public System.Nullable<DateTime> AppointmentDateTime { get; set; }

}

public class Task
{
    public Int32 TaskID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public Int32 DisplayOrder { get; set; }
    public bool IsActive { get; set; }
}

public class WorkTask
{
    public Int32 WorkTaskID { get; set; }
    public Task Task { get; set; }
    public bool IsCompleted { get; set; }
    public System.Nullable<DateTime> CompletedDateTime { get; set; }
    public string CompletedBy { get; set; }
}   

public class WorkItem
{
    public Int32 WorkItemID { get; set; }
    public HolterTest HolterTest { get; set; }
    public string Status { get; set; }
    public List<WorkTask> WorkTasks { get; set; }
    public bool IsStarted { get; set; }
    public bool IsCompleted { get; set; }
    public System.Nullable<DateTime> CompletedDateTime { get; set; }

}

現在、HolterTestsのリストを取得し、WorkItemを持たないものを検索し、WorkItemsを作成し、現在アクティブなタスクのリストに基づいてWorkTasksを含むHolterTestsを関連付けるビジネスロジック関数があります。

私の問題は、WorkItemControllerのすべてのWorkItem(子アイテムを含む)を取得するLINQを記述して、PatientNumberによってビュー(IsCompleted = falseのWorkItems)で実行する作業を表示し、更新できるようにする方法です。特定のWorkItemのWorkTasks。

4

2 に答える 2

1

エンティティへのLinqは http://msdn.microsoft.com/en-us/library/bb399367.aspxを説明しました

ただし、ここから始める方が適している場合があります。EFメインサイトhttp://msdn.microsoft.com/en-us/data/ee712907

本当に真っ直ぐ飛び込みたいのなら、このビデオとサンプルコードを試してみてください。http://msdn.microsoft.com/en-us/data/jj193542 次に、このhttp://msdn.microsoft.com/en-us/data/jj573936を参照してください。

基本的に、あなたが持っているPOCOに基づいて、POCOごとに読み取り、その方法でデータを取得できます。ただし、POCOSにナビゲーションプロパティと外部キーが定義されている場合、EFは多くの手間をかけます。POCOの定義とコードファーストのパターンを再検討する価値があります。

于 2013-02-21T15:36:50.300 に答える
1

ナビゲーションプロパティを使用して、関連するものにアクセスします。この例では、ナビゲーションプロパティを仮想に設定していないことに注意してください。次のようにモデルを更新する必要があります。

public class WorkItem
{
    public Int32 WorkItemID { get; set; }
    public virtual HolterTest HolterTest { get; set; }
    public string Status { get; set; }
    public virtual List<WorkTask> WorkTasks { get; set; }
    public bool IsStarted { get; set; }
    public bool IsCompleted { get; set; }
    public System.Nullable<DateTime> CompletedDateTime { get; set; }

}

患者番号で作業項目にアクセスするための簡単な機能は次のとおりです。

IEnumerable<WorkItem> GetWorkIncompleteWorkItemsByPatient(string patientNumber)
{
  var db = new YourContext();
  return db.WorkItems.Where(wi => wi.IsCompleted == false && wi.HolterTest.PatientNumber == patientNumber);
}

次に、関連するタスクに取り組むために、タスクを介してそれにアクセスします。この例では、タスクIDを知っている場合は次のようになります。

var workTask = YourWorkItem.WorkTasks.FirstOrDefault(wt => wt.WorkTaskID == worktaskId);

次のように、作業項目のすべてのタスクを確認できます。

foreach (var workTask in YourWorkItem.WorkTasks)
{
  //your logic here...
}
于 2013-02-21T16:15:31.623 に答える