変換する条件付きで建つのSQLのwhere句にLINQ
-
13-09-2019 - |
質問
なのでこちらでお分かりになった質問はここにものってみました。かえるのピうにlinqが知りたいと思い場合はこの変換は以下のsqlクエリー(建C#)にlinqクエリー:
public void DoSomeQuery(bool whereCriteria1, bool whereCriteria2)
{
string sqlQuery = "SELECT p.*";
string fromClause = " FROM person p";
string whereClause = " WHERE ";
if (whereCriteria1)
{
fromClause += ", address a";
whereClause += " p.addressid = a.addressid and a.state = 'PA' and a.zip = '16127' "
}
if (whereCriteria2)
{
fromClause += ", color c";
whereClause += " p.favoritecolorid = c.colorid and c.name = 'blue'"
}
// arbitrarily many more criteria if blocks could be here
sqlQuery += fromClause + whereClause;
// do stuff to run the query
}
ます。いっbool変数を知らせてくれるwhere条件を追加しますいることlinqでも---これは醜い.
解決
var query = from p in persons select p;
if (whereCriteria1)
{
query = from p in query
join a in address on p.addressid equals a.addressid
where a.state = 'PA'
where a.zip = '16127'
select p;
}
if (whereCriteria2)
{
query = from p in query
join c in colors on p.favoritecolorid equals c.colorid
where c.name = 'blue'
select p;
}
他のヒント
あなたは、実行時に構築された動的な述語を探しています。 ここの良いCodeProjectの記事です。
また、この PredicateBuilder のに興味がある可能性があります。
確かに、その答えはまったという私の提供のため この質問.基本戦略を定義の"ベースクエ"として条件付きでの追加が条項を返します。
所属していません StackOverflow