2

したがって、この質問に本当に答える質問はここにはありませんでした。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
}

それは理にかなっていますか?追加する where 句の条件を知らせる bool 変数がたくさんあります。まあ...これは醜いので、linqでそれをやりたいです。

4

3 に答える 3

2
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;
}
于 2009-12-04T19:10:18.603 に答える
1

実行時に構築される動的述語を探しています。 これは良いCodeProjectの記事です

このPredicateBuilderにも興味があるかもしれません。

于 2009-12-04T19:07:38.200 に答える
0

確かに、答えは私がこの質問に提供したものと似ています。基本的な戦略は、「基本クエリ」を定義してから、条件付きで where 句をクエリに追加することです。

于 2009-12-04T19:07:57.030 に答える