在运行时构造的LinQ到SQL查询

本文关键字:SQL 查询 LinQ 运行时 | 更新日期: 2023-09-27 18:18:00

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

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

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

参数哈希表将包含如下值params [@ id的]= 5

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

我想知道是否可以用LinQ来做。有人能告诉我如何执行语句作为一个LinQ查询?

谢谢,大卫

在运行时构造的LinQ到SQL查询

看看这篇文章。看看john skeet的回答,他解释了如何使用CSharpCodeProvider在运行时执行语句。

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

即使使用动态linq,你也会遇到问题,因为你总是需要在查询中指定from类。

另一个选择是,如果你想在你的实体框架模型中使用它,使用实体sql会更容易,查看这里和这里获取更多信息。

通过ADO使用字符串查询语句是一个相当大的飞跃。从。NET到Linq到SQL。在第一个实例中,您需要构建Linq to SQL实体模型/DataContext。你如何去解析sql语句从文本到Linq我不完全确定,但如果我想看看如何实现这一点,我会阅读表达式树的观点,以建立一个解析器,你的字符串查询和引用你的实体模型,以产生一个Linq查询。

在codeplex和另一个MS库找到了LinqTextQueryBuilder。下面的链接

LinqTextQueryBuilder

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