LinQ to SQL查询在运行时构造

时间:2011-12-15 09:59:49

标签: c# linq-to-sql

我有一个xml文件,其中包含查询详细信息,如

<queries>
  <query>
    <name>GetStudentById</name>
    <statement>select student_name from student where student_id=@id</statement>
   </query>
 </queries>

在C#代码中,用户将调用方法ExecuteQuery(string queryname,hashtable params) 我将使用查询名称从xml文件中检索查询语句。

params哈希表将包含类似的值 PARAMS [ '@ ID'] = 5

然后我将使用ADO .NET构建查询并在构造查询语句并将参数列表传递给它之后使用ExecuteReader在运行时执行它。

我想知道是否可以使用LinQ来实现。有人可以告诉我如何将该语句作为LinQ查询执行吗?

谢谢,

大卫

3 个答案:

答案 0 :(得分:1)

查看此SO帖子。看看john skeet的答案,他解释了如何使用CSharpCodeProvider在运行时执行语句。

然而,您必须自己将语句从sql转换为linq。如果它没有特别的原因必须是linq,我建议将它保存在sql中,因为在一天结束时你要将sql解析为linq然后再回到sql。

即使使用dynamic linq,您也会遇到问题,因为您始终必须在查询中指定from类。

另一种选择是,如果你想在实体框架模型中使用它,那么使用entity sql会更容易,看看herehere以获取更多信息。

答案 1 :(得分:0)

从使用ADO.NET的字符串查询语句到Linq再到SQL,这是一个相当大的飞跃。在第一个实例中,您需要构建Linq to SQL实体模型/ DataContext。你如何解析从文本到Linq的sql语句我不完全确定,但如果我想研究如何实现这一点,我将阅读表达式树,以期构建一个解析器来获取字符串查询和引用到您的实体模型以生成linq查询。

答案 2 :(得分:0)

在codeplex和另一个MS Library中找到了一个名为LinqTextQueryBuilder的东西。 以下链接

LinqTextQueryBuilder

http://msdn.microsoft.com/en-us/vstudio/bb894665.aspx