パラメータを含む複数のクエリーを1つの "大きな" ライブビューに置き換えられることがよくあります。こうすると、コードが簡潔になり、実行速度も向上することがあります。この技術は、ライブビューの次の2つの機能に基づいています。
そこで、パラメータ値を変えて複数のクエリーを発行する代わりに、1つのライブビューを作成し、そのビューにインデックスを作成します。特定のパラメータ値に対応する項目のリストが必要な場合は、その値のインデックスから項目を取得することができます。
この機能は、「LiveLinqIssueTracker デモ」に具体例があります。
Assigned Issues フォームでは、複数のビューが使用されています。これは、従業員ごとの個別ビューで、パラメータ employeeID に依存します。ここでは、LiveLinq to DataSet バージョンのビューを使用していますが、Objects および XML バージョンのビューも同様です。
LINQ |
コードのコピー
|
---|---|
from i in _dataSet.Issues.AsLive() join p in _dataSet.Products.AsLive() on i.ProductID equals p.ProductID join f in _dataSet.Features.AsLive() on new { i.ProductID, i.FeatureID } equals new { f.ProductID, f.FeatureID } join e in _dataSet.Employees.AsLive() on i.AssignedTo equals e.EmployeeID where i.AssignedTo == employeeID select new Issue { IssueID = i.IssueID, ProductName = p.ProductName, FeatureName = f.FeatureName, Description = i.Description, AssignedTo = e.FullName }; |
デモアプリケーションは、Assigned Issues 2 フォームで同じ機能を別の方法でも実装しています。このフォームでは、パラメータに依存する複数のビューではなく、全従業員のデータを含む1つのビューが使用されています。この1つのビューにパラメータはありません。
LINQ |
コードのコピー
|
---|---|
_bigView = from i in _dataSet.Issues.AsLive() join p in _dataSet.Products.AsLive() on i.ProductID equals p.ProductID join f in _dataSet.Features.AsLive() on new { i.ProductID, i.FeatureID } equals new { f.ProductID, f.FeatureID } join e in _dataSet.Employees.AsLive() on i.AssignedTo equals e.EmployeeID select new Issue { IssueID = i.IssueID, ProductName = p.ProductName, FeatureName = f.FeatureName, Description = i.Description, AssignedToID = e.EmployeeID, AssignedToName = e.FullName }; |
このビューには、従業員 ID フィールドに基づくインデックスが作成されます。
LINQ |
コードのコピー
|
---|---|
_bigView.Indexes.Add(x => x.AssignedToID); |
このため、特定の従業員 ID の項目をいつでも高速に取得できます。
さらに、この大きなビューからビューを作成するだけで、特定の従業員 ID 値(このデモでは comboAssignedTo.SelectedIndex)に対応するデータのライブビューを作成することができます。
LINQ |
コードのコピー
|
---|---|
from i in _bigView where i.AssignedToID == comboAssignedTo.SelectedIndex select i; |