4

次のようなクエリ スクリプトがあります。

SELECT View1.OrderDate,View1.Email,SUM(View1.TotalPayments) FROM dbo.View1 WHERE (View1.OrderStatus = 'Completed') GROUP BY View1.OrderDate,View1.Email HAVING (SUM(View1.TotalPayments) > 75);

SQL クエリから重要な情報を引き出す方法はありますか? テーブル名や列名など、2 つの質問があります。

  1. 検索を行ったところ、 ANTLR などのパーサーが見つかりましたが、このパーサーを C# 言語で使用する方法を説明するドキュメントは見つかりませんでした。
  2. Entity Frame Work を使用して SQL クエリを解析する方法はありますか? 私のクエリは完全に動的で、実行時に作成されます
4

3 に答える 3

4

最良の答えは、Irony パーサーを使用することだと思います: http://irony.codeplex.com/

Hanselman には、それを使用して SQL を解析する方法への優れたリンクがあります: http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx

これがお役に立てば幸いです。幸運を祈ります。

于 2012-09-19T02:58:00.180 に答える
1

システム テーブルの一部を使用して、探している情報を取得できます。

select p.name ParentTable, r.name ReferencedTable, k.name KeyName
from sys.foreign_keys k
join sys.tables p on k.parent_object_id = p.object_id
join sys.tables r on k.referenced_object_id = r.object_id

データベースの一貫性に応じて、キー名が何であるかを推測できます。したがって、参照テーブルが [User] の場合、UserId を参照していると想定できます。テーブルに複数のキーがある場合、これは探している答えではありません。

于 2012-09-18T19:33:49.523 に答える
-1

このようなエンティティフレームワークで動的クエリを構築できます

If(case1)
{
    var query = db.x.where(x => x).toList();
}
else
{
   var query = db.x.where(y => y).toList()
}
于 2012-09-18T19:19:26.973 に答える