質問

なのでこちらでお分かりになった質問はここにものってみました。かえるのピうに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 のに興味がある可能性があります。

確かに、その答えはまったという私の提供のため この質問.基本戦略を定義の"ベースクエ"として条件付きでの追加が条項を返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top