パフォーマンスの悪いコードがあり、.ToListを開始する前に、適切なwhere句を導入するためにコードを書き直す必要がありますが、それが行き詰まっています。
現在、コードはこれと同じように見えます(大まかに言って、表示しやすくするために検索条件の一部を削除しました)
var Widgets = from b in _caspEntities.Widgets.Include("WidgetRegionLogs")
.Include("WidgetStatusLogs").Include("WidgetVoltageTests")
select b;
IEnumerable<Widget> results = Widgets.ToList();
if (comboBoxRegion.SelectedValue.ToString() != "0")
{
results = from b in results
where b.CurrentRegionLog != null && b.CurrentRegionLog.RegionId == int.Parse(comboBoxRegion.SelectedValue.ToString())
select b;
}
if (comboBoxStatus.SelectedValue != null)
{
results = from b in results
where b.CurrentStatusLog != null && b.CurrentStatusLog.StatusId == comboBoxStatus.SelectedValue.ToString()
select b;
}
if (txtCode.Text.Trim().Length > 0)
{
results = from b in results
where b.CodeNumber == txtCode.Text.Trim()
select b;
}
dataGridViewWidget.DataSource = results.ToList();
SQLを簡単に書くことができます。基本的にモデルは単純です。RegionLogとStatusLogの両方に履歴を格納するウィジェットがあります。現在のリージョンとステータスは、WidgetIDでグループ化し、最新の更新日を選択することでこれから取得されます(次に、リージョンテーブルとステータステーブルに移動して実際の値を取得します)。
ですから、これをLINQに変換する必要がありますが、正直なところ、私には手がかりはありませんが、ケンであり、学ぶ意欲があります。私の頭の中で、where句をいくつか追加し、where句を適用した後にWidget.toListを実行する必要があると思います。CurrentRegionLog
とのCurrentStatusLog
概念は、を実行するまで入力されないため、苦労していIEnumerable
ます。
誰かがいくつかのポインタを与えることができれば、私は感謝するでしょう、ありがとう
編集-追加
public BatteryRegionLog CurrentRegionLog
{
get { return _currentRegionLog; }
}
private BatteryRegionLog _currentRegionLog
{
get
{
if (this.BatteryRegionLogs.Count > 0)
{
BatteryRegionLog log = this.BatteryRegionLogs.OrderByDescending(item => item.LastModifiedDate).First();
return log;
}
else
{
return null;
}
}
}