DataSource for Entity Framework for WPF/Silverlight
ライブビュー:他のビューに基づいてビューを作成し、ビューにインデックスを作成する方法
DataSource for Entity Framework > プログラミングガイド > ライブビュー:他のビューに基づいてビューを作成し、ビューにインデックスを作成する方法

パラメータを含む複数のクエリーを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;