LINQ to SQL クエリから返される列の数を動的に制限することはできますか?
50 列を超えるデータベース SQL ビューがあります。私のアプリには、各列に 1 つずつ、50 を超えるプロパティを持つドメイン オブジェクトがあります。私の winforms プロジェクトでは、ドメイン オブジェクトのリストをグリッドにバインドします。デフォルトでは、いくつかの列のみが表示されますが、ユーザーは任意の列のオン/オフを切り替えることができます。
ユーザーは、グリッドの読み込みに時間がかかりすぎると不満を漏らしています。LINQ で生成された SQL クエリをキャプチャし、それを SQL Server Management Studio 内で実行して、遅いことを確認しました。非表示の列をすべて削除して SQL ステートメントを変更すると、ほぼ瞬時に実行されます。パフォーマンスとクエリ内の列数の間には直接的な相関関係があります。
LINQ で生成された SQL クエリから返される列の数を動的に変更できるかどうか疑問に思っていますか? たとえば、現在のコードは次のようになります。
public List<Entity> GetEntities()
{
using (var context = new CensusEntities())
{
return (from e in context.Entities
select e).ToList();
}
}
context.Entities オブジェクトは、50 を超える列を含む SQL ビューから生成されたため、上記を実行すると、「SELECT Col1、Col2、Col3、... Col50 FROM Entity INNER JOIN...」のような SQL が生成されます。メソッドのシグネチャを次のように変更したいと思います。
public List<Entity> GetEntities(string[] visibleColumns)
{
using (var context = new CensusEntities())
{
return (from e in context.Entities
select e).ToList();
}
}
このメソッドの本体を変更して、生成された SQL ステートメントを変更して、気になる列の値のみを返す方法がわかりません。他のすべての値は NULL にすることができます。