ADO.NET を使用して、次のようなカスタム クエリを簡単に作成できました。
SqlCommand.CommandText = "SELECT Column" + variable1 + ", Column" + Variable2 + " FROM TABLE";
それは LINQ to SQL で行うことができますか?
ありがとう
ADO.NET を使用して、次のようなカスタム クエリを簡単に作成できました。
SqlCommand.CommandText = "SELECT Column" + variable1 + ", Column" + Variable2 + " FROM TABLE";
それは LINQ to SQL で行うことができますか?
ありがとう
はい でそのようなことができますDynamic query with Linq
。
これは、カスタム クエリを作成できる例ですDynamic query with Linq
。
string strWhere = string.Empty;
string strOrderBy = string.Empty;
if (!string.IsNullOrEmpty(txtAddress.Text))
strWhere = "Address.StartsWith(\"" + txtAddress.Text + "\")";
if (!string.IsNullOrEmpty(txtEmpId.Text))
{
if(!string.IsNullOrEmpty(strWhere ))
strWhere = " And ";
strWhere = "Id = " + txtEmpId.Text;
}
if (!string.IsNullOrEmpty(txtDesc.Text))
{
if (!string.IsNullOrEmpty(strWhere))
strWhere = " And ";
strWhere = "Desc.StartsWith(\"" + txtDesc.Text + "\")";
}
if (!string.IsNullOrEmpty(txtName.Text))
{
if (!string.IsNullOrEmpty(strWhere))
strWhere = " And ";
strWhere = "Name.StartsWith(\"" + txtName.Text + "\")";
}
EmployeeDataContext edb = new EmployeeDataContext();
var emp = edb.Employees.Where(strWhere);
grdEmployee.DataSource = emp.ToList();
grdEmployee.DataBind();
詳細については、このページを確認してください。
いいえ、動的クエリを作成する一般的な方法はありません。
メソッドには、既知の特定の戻り値の型が必要です。その型は System.Object にすることができますが、実際にメンバーを取得するには、多くの見苦しいリフレクション コードを使用する必要があります。また、この場合、戻り値を生成するために、醜いリフレクション式ツリー コードを大量に使用する必要があります。
UI 側で列を動的に生成しようとしている場合は、それをやめてください。設計時に列を定義してから、実際に必要な/ユーザーに表示したい列を表示/非表示にします。クエリで、表示される可能性のあるすべての列を返すようにします。
すべてのデータ列を選択する重大なパフォーマンスの問題に気付いていない限り (その場合、おそらくデータベース レベルでインデックスの問題をカバーしていない可能性があります)、このアプローチの方がはるかに優れています。述語とソート順を動的に生成することはまったく問題ありませんが、実際には出力リストでこれを行いたくありません。 これについての詳細