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

根据您的数据库的一致性,您可以对 Key Name 做出假设。因此,如果引用表是 [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 回答