3

String を Linq として実行する方法はありますか? 動的クエリがあり、そのためには、Linq 式を文字列に変換してから、条件付きクエリを持つ文字列ブライダーを追加する必要がありました。したがって、式全体が文字列になりました。この文字列を今すぐ実行する方法は? この文字列を再度 Linq に変換する必要がありますか? どうやって進める?

 StringBuilder sb = new StringBuilder();
 if (InstId != String.Empty)
 {
     sb.Append("application.Id ==" + InstId);
 }
 if (BId != String.Empty)
 {
     sb.Append("&& application.BId ==" + BId);
 }
 if (CId != String.Empty)
 {
     sb.Append("&& application.CId ==" + CId);
 }

String query=("from tables in context.Application .........
........join .........."+sb);

var q1=query;

このq1を実行する方法は?

4

2 に答える 2

2

あなたはそれを必要としませんStringBuilder

var query = context.Application;

if (InstId != String.Empty)
{
    query = query.Where(a => a.Id == InstId);
}
if (BId != String.Empty)
{
    query = query.Where(a => a.BId == BId);
}
if (CId != String.Empty)
{
    query = query.Where(a => a.CId == CId);
}

var items = query.Join(/* your join here */).ToList();

クエリはToList、そのようなメソッドが呼び出されるまで実行されないため、必要なだけ追加できますWhere()

于 2013-04-09T12:54:22.943 に答える
2

多くの場合、これが優れたプラクティスであるとは必ずしも思いませんが、それを可能にするDynamic LINQライブラリがあります。

一般に、可能であれば、 @MarcinJurazakの応答やPredicateBuilderクラスなど、より厳密に型チェックできるものを使用することをお勧めします。

于 2013-04-09T12:58:43.853 に答える